HTTP1.0工作原理
2017-04-03 08:58
204 查看
1.HTTP工作原理
《HTTP响应报文与工作原理详解》讲的比较详细了。2.示例
(1)server端程序如下:package org.yeyouluo.demo.jsp; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; /** * 实现HTTP 1.0的服务器,对于所有的HTTP请求,会把HTTP请求头响应回去。 * @author yeyouluo * */ public class MyHTTPServer { public static void main(String[] args) throws IOException { int port = 80; ServerSocket serverSocket = new ServerSocket(port); System.out.println("启动服务,绑定端口: " + port); ExecutorService fixedThreadPool = Executors.newFixedThreadPool(30); //5.线程池 //6.这个循环不停监听socket连接,使用SocketHandler处理连入的socket,而这个处理是放在线程池中的。 while(true){ Socket clientSocket = serverSocket.accept(); System.out.println("新的连接"+clientSocket.getInetAddress() + ":" + clientSocket.getPort()); try{ fixedThreadPool.execute(new SocketHandler(clientSocket)); }catch(Exception e){ e.printStackTrace(); } } } } class SocketHandler implements Runnable{ static final String CRLF = "\r\n"; //1.换行符 private Socket clientSocket; public SocketHandler(Socket clientSocket) { super(); this.clientSocket = clientSocket; } public void handleSocket(Socket clientSocket) throws IOException{ BufferedReader in = new BufferedReader( new InputStreamReader(clientSocket.getInputStream()) ); PrintWriter out = new PrintWriter( new BufferedWriter(new OutputStreamWriter(clientSocket.getOutputStream())) ,true); String requestHeader = ""; String s; while( (s = in.readLine()) != null ){ s += CRLF; //2.很重要,默认情况下in.readLine的结果中'\r\n'被去掉了 requestHeader += s; if( CRLF.equals(s) ){ //如果读取的一行数据只有换行符,说明请求头已经结束了 break; } } System.out.println("客户端请求头:\n" + requestHeader); String responseBody = "客户端的请求头是:\n"+requestHeader; String responseHeader = "HTTP/1.0 200 OK\r\n" + "Content-Type: text/plain; charset=UTF-8\r\n" + "Content-Length: "+responseBody.getBytes().length+"\r\n" + "\r\n"; System.out.println("响应头:\n" + responseHeader); out.write(responseHeader); out.write(responseBody); out.flush(); out.close(); in.close(); clientSocket.close(); } @Override public void run() { try { handleSocket(clientSocket); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
server端
启动server端。
(2)client端直接通过浏览器或curl工具发送http请求即可。比如在浏览器中输入http://127.0.0.1 。
(3)server端控制台打印如下:
3.参考
http://wiki.jikexueyuan.com/project/java-web/00-02.html相关文章推荐
- HTTP1.0与HTTP1.1的区别
- Key Differences between HTTP/1.0 and HTTP/1.1
- HTTP详解01 ----- 工作原理
- HTTP工作原理
- http/https 1.0、1.1、2.0
- 超文本传输协议 -- HTTP/1.0 Hyptertext Transfer Protocol
- Python基于BaseHTTPRequestHandler的HTTP代理V1.0
- http1.0和http1.1的区别
- HTTP1.0与HTTP1.1的区别
- 黄聪:搜索引擎的工作原理系列视频教程1.0
- HTTP1.0和HTTP1.1的区别
- HTTP详解(1)-工作原理
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtm
- HTTP详解(3)-http1.0 和http1.1 区别
- HTTP详解(3)-http1.0 和http1.1 区别
- HTTP 1.1与HTTP 1.0的比较
- HTTP协议及工作原理解析
- Unrecognized xbean element mapping: beans in namespace http://xfire.codehaus.org/config/1.0
- HTTP详解(3)-http1.0 和http1.1 区别
- HTTP 1.1 与HTTP 1.0 的比较