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工作原理的更多相关文章

  1. WebSocket原理及与http1.0/1.1 long poll和 ajax轮询的区别【转自知乎】

    一.WebSocket是HTML5出的东西(协议),也就是说HTTP协议没有变化,或者说没关系,但HTTP是不支持持久连接的(长连接,循环连接的不算)首先HTTP有1.1和1.0之说,也就是所谓的ke ...

  2. springmvc工作原理以及源码分析(基于spring3.1.0)

    springmvc是一个基于spring的web框架.本篇文章对它的工作原理以及源码进行深入分析. 一.springmvc请求处理流程 二.springmvc的工作机制 三.springmvc核心源码 ...

  3. 结合 category 工作原理分析 OC2.0 中的 runtime

    绝大多数 iOS 开发者在学习 runtime 时都阅读过 runtime.h 文件中的这段代码: struct objc_class { Class isa  OBJC_ISA_AVAILABILI ...

  4. JavaWeb从0开始学(一)-----搭建第一个Web应用程序与JSP工作原理

    以往学习的时候大多是看完书或者看完视频,动手实践一下就OK了.然而过了一段时间我发现东西都忘差不多了,需要复习才能重新掌握.现在开始学习JavaWeb了,我将在这里记录自己的学习的一点一滴,不仅便于自 ...

  5. struts2(2.0.x到2.1.2版本)的核心和工作原理(转)

    在学习struts2之前,首先我们要明白使用struts2的目的是什么?它能给我们带来什么样的好处? 设计目标 Struts设计的第一目标就是使MVC模式应用于web程序设计.在这儿MVC模式的好处就 ...

  6. HTTP协议请求响应过程和HTTPS工作原理

    HTTP协议 HTTP协议主要应用是在服务器和客户端之间,客户端接受超文本. 服务器按照一定规则,发送到客户端(一般是浏览器)的传送通信协议.与之类似的还有文件传送协议(file transfer p ...

  7. HTTP响应报文与工作原理详解

    超文本传输协议(Hypertext Transfer Protocol,简称HTTP)是应用层协议.HTTP 是一种请求/响应式的协议,即一个客户端与服务器建立连接后,向服务器发送一个请求;服务器接到 ...

  8. 【转】HTTP响应报文与工作原理详解

    超文本传输协议(Hypertext Transfer Protocol,简称HTTP)是应用层协议.HTTP 是一种请求/响应式的协议,即一个客户端与服务器建立连接后,向服务器发送一个请求;服务器接到 ...

  9. HTTP协议详解及http1.0与http1.1http2.0的区别

    HTTP协议介绍 http(超文本传输协议)是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统.特点: (1)支持客户/服务器模式. HTTP是一个客户端和服务器端请 ...

随机推荐

  1. java性能调优的11个建议

    1.在必要之前,先不要优化 2.使用分析器来找到真正的瓶颈 3 .为整个应用程序创建性能测试套件 4.首先解决最大的瓶颈问题 5.使用StringBuilder以编程方式连接字符串       Str ...

  2. js能否实现截图,截图之后的图片数据再下载到本地?

    https://www.zhihu.com/question/20763177 http://www.cnblogs.com/yanweidie/p/5203943.html

  3. mongodb主从复制配置

    dbpath=/home/mongodb/data logpath=/home/mongodb/log/mongodb.log logappend=true port= fork=true noaut ...

  4. ASPNET session客户端与服务…

    除非程序通知服务器删除一个session,否则服务器会一直保留,程序一般都是在用户做log off的时候发个指令去删除session.然而浏览器从来不会主动在关闭之前通知服务器它将要关闭,因此服务器根 ...

  5. (二)搭建SSH环境

    一.struts 1.添加jar包: commons-fileupload-1.3.1.jar,[文件上传相关包] commons-io-2.2.jar, commons-lang-2.4.jar , ...

  6. 日期组件wdatepicker

    导入WdataPicker文件包到项目的js文件夹下: 在用户管理中的添加.编辑jsp页面对生日表单项引入日期组件: <script type="text/javascript&quo ...

  7. HDU - 4821 String(窗口移动+map去重+hash优化)

    String Given a string S and two integers L and M, we consider a substring of S as “recoverable” if a ...

  8. Linux之常用命令简析

    ls cd mkdir rmdir touch ln cp rm mv 1.ls   显示当前目录下的文件及文件夹(不显示隐藏的) -l   显示详细信息 --all  显示隐藏的文件及文件夹(就是显 ...

  9. hdu1688(dijkstra求最短路和次短路)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1688 题意:第k短路,这里要求的是第1短路(即最短路),第2短路(即次短路),以及路径条数,最后如果最 ...

  10. Android实现点击两次返回退出APP

    Android实现点击两次退出APP 这两天在做一个项目碰到这么个问题,需要主界面点击两次直接退出整个APP而不是返回上一个界面,查找了网上的资料,整合和修改了一下写了这篇博客. 这里我主要以我的项目 ...