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. function multi-versioning in GCC

    https://lwn.net/Articles/691932/ https://gcc.gnu.org/wiki/FunctionMultiVersioning why multi-versioni ...

  2. CodeForces 485A Factory (抽屉原理)

    A. Factory time limit per test 1 second memory limit per test 256 megabytes input standard input out ...

  3. debian linux中文桌面系统安装

    一.基本系统安装 1 .安装光盘:可以到http://debian.cn99.com去下载ISO,我是之前从官方网站下载的.一只载第一张光盘即可.用NERO烧录成光碟. 2.将安装光盘放驱,并在BIO ...

  4. HDU5381【莫队算法+区间GCD特性】

    前言: 主要最近在刷莫队的题,这题GCD的特性让我对莫队的使用也有了新的想法.给福利:神犇的一套莫队算法题 先撇开题目,光说裸的一个莫队算法,主要的复杂度就是n*sqrt(n)对吧,这里我忽略了一个左 ...

  5. IT兄弟连 Java语法教程 Java语言背景

    驱使计算机语言革新的因素有两个:程序设计技术的改进和计算环境的改变.Java也不例外.在大量继承C和C++的基础之上,Java还增加了反应当前程序设计技术状态的功能与精华.针对在线环境的蓬勃发展(In ...

  6. PHP命名大小写敏感规则

    一直觉得PHP中各种大小写规则理不清,就连工作多年的老手们也不一定能对PHP大小写敏感问题足够了解.在PHP中,大小写敏感问题的处理比较乱,大家一定要注意.即使某些地方大小写不敏感,但在编程过程中能始 ...

  7. 全功能Python测试框架:pytest

    python通用测试框架大多数人用的是unittest+HTMLTestRunner,这段时间看到了pytest文档,发现这个框架和丰富的plugins很好用,所以来学习下pytest.   imag ...

  8. Django之Form的ModelForm

    form与model的终极结合. from django import forms class BookForm(forms.ModelForm): class Meta: model = model ...

  9. Codeforces Round #561 (Div. 2) C. A Tale of Two Lands

    链接:https://codeforces.com/contest/1166/problem/C 题意: The legend of the foundation of Vectorland talk ...

  10. CodeForces - 1004A-Sonya and Hotels(思维)

    Sonya decided that having her own hotel business is the best way of earning money because she can pr ...