图解HTTP_1

  • 字节流服务:所谓的字节流服务(Byte Stream Service)是指,为了方便传输,将大块数据分割成以报文段(segment)为单位的数据包进行管理。
  • HTTP协议规定,请求从客户端发出,最后服务器端响应该请求并返回。
  • 下面是从客户端发送给某个HTTP服务器端的请求报文中的内容
GET /index.htm HTTP/1.1
Host: hackr.jp

起始行开头的GET表示请求访问服务器的类型,称为方法(method)。随后的字符串\index.htm指明了请求访问的资源对象,也叫做请求URI(request-URI)。最后的HTTP/1.1,即HTTP的版本号,用来提示客户端用的HTTP协议功能。综合来看,这段请求的意思是:请求访问某台HTTP服务器上的/index.htm页面资源。请求报文由请求方法、请求URI、协议版本、可选的请求首部字段和内容实体构成的。

  • 接收到请求的服务器,会将请求的内容的处理结果以响应的形式返回。
HTTP/1.1 200 OK
Date: Tue, 10 Jul 2012 06:50:15 GMT
Content-Length: 362
Content-Type: text/html

<html>
......

在起始行开头的HTTP/1.1表示服务器对应的HTTP版本。
紧挨着的200 OK表示请求处理结果的状态码(status code)和原因短语(reason-phrase)。下一行显示了创建响应的日期和时间,是首部字段(header field)内的一个属性。
响应报文基本由协议版本、状态码(表示请求成功或失败的数字代码)、用以解释状态吗的原因短语、可选的响应首部字段以及实体主体构成。
+ HTTP是不保存状态的协议:HTTP是一种不保存状态,即无状态(stateless)协议。HTTP协议自身不对请求和响应之间的通信状态进行保存。也就是说在HTTP这个级别,协议对于发送过的请求或响应都不做持久化处理。
+ HTTP/1.1虽是无状态协议,但为了实现期望的保存状态功能,于是引入了Cookie技术。有了Cookie再用HTTP协议通信,就可以管理状态了。
Cookie技术通过在请求和响应报文中写入Cookie信息来控制客户端的状态。Cookie会根据从服务器端发送的响应报文内的一个叫做Set_Cookie的首部字段信息,通知客户端保存Cookie。当下次客户端再往该服务器发送请求时,客户端会自动在请求报文中加入Cookie值后发送出去。
+ HTTP协议使用URI定位互联网上的资源。
+ 指定请求URI的方式有很多
URI为完整的请求URI

GET http://hackr.jp/index.htm HTTP/1.1

在首部字段Host中写明网络域名或IP地址

GET /index.htm HTTP/1.1
Host: hackr.jp

告知服务器意图的HTTP方法

  • GET:获取资源。GET方法用来请求访问已被URI识别的资源。指定的资源经服务器端解析后返回响应内容。

请求:

GET /index.html HTTP/1.1
Host: www.hackr.jp

响应:返回index.html的页面资源
+ POST:传输实体主体

请求:

GET /submit.cgi HTTP/1.1
Host: www.hackr.jp
Content-Length: 1560

响应:返回submit.cgi接收数据的处理结果
+ PUT:传输文件。PUT方法用来传输文件。就像FTP协议的文件上传一样,要求在请求报文的主体中包含文件内容,然后保存到请求URI指定的位置。

请求:

PUT /example.html HTTP/1.1
Host: www.hackr.jp
Content-Type: text/html
Content-Length: 1560

响应:响应返回状态码204 No Content (比如:该html已存在于服务器上)
+ HEAD:获得报文首部。用于确认URI的有效性和资源更新的日期和时间。

请求:

扫描二维码关注公众号,回复: 1111969 查看本文章
HEAD /index.html HTTP/1.1
Host: www.hackr.jp

响应:返回index.html有关的响应首部
+ DELETE:删除文件。DELETE方法按请求URI删除指定的资源。

请求:

DELETE /example.html HTTP/1.1
Host: www.hackr.jp

响应:响应返回状态码204 No Content(比如:该html已从服务器上删除)
+ OPTIONS:询问支持的方法。OPTIONS方法用来查询请求URI指定的资源支持的方法。

请求:

OPTIONS * HTTP/1.1
Host: www.hackr.jp

响应:

HTTP/1.1 200 OK
Allow: GET, POST, HEAD, OPTIONS
(返回服务器支持的方法)
  • TRACE:追踪路径。TRACE方法是让Web服务器端将之前的请求通信环回给客户端的方法。
  • CONNECT:要求用隧道协议连接代理。CONNECT方法要求在与代理服务器通信时建立隧道,实现用隧道协议进行TCP通信。主要使用SSL(Secure Sockets Layer,安全套接层)和TLS(Transport Layer Security,传输层安全)协议把通信内容加密后经网络隧道传输。CONNECT方法的格式:CONNECT 代理服务器名:端口号 HTTP版本

请求:

CONNECT proxy.hackr.jp:8080 HTTP/1.1
Host:proxy.hackr.jp

响应:HTTP/1.1 200 OK (之后进入网络隧道)

方法 说明 支持的HTTP协议版本
GET 获取资源 1.0、1.1
POST 传输实体主体 1.0、1.1
PUT 传输文件 1.0、1.1
HEAD 获得报文首部 1.0、1.1
DELETE 删除文件 1.0、1.1
OPTIONS 询问支持的方法 1.1
TRACE 追踪路径 1.1
CONNECT 要求用隧道协议连接代理 1.1
LINK 建立和资源之间的联系 1.0
UNLINK 断开连接关系 1.0

+ 在HTTP/1.1中,所有的连接默认都是持久连接。持久连接的特点是,只要任意一端没有明确提出断开连接,则保持TCP连接状态。

Cookie交互的情景下,HTTP请求报文和响应报文的内容如下:

1 请求报文(没有Cookie信息的状态)

GET /reader/ HTTP/1.1
Host: hackr.jp
*首部字段内没有Cookie的相关信息

2 响应报文(服务器端生成Cookie信息)

HTTP/1.1 200 OK
Date: Thu, 12 Jul 2012 07:12:20 GMT
Server: Apache
<Set-Cookie: sid=1342077140226724; path=/; expires=Wed,=>10-Oct-12 07:12:20 GMT>
Content-Type: text/plain; charset=UTF-8

3 请求报文(自动发送保存着的Cookie信息)

GET /image/ HTTP/1.1
Host: hackr.jp
Cookie: sid=1342077140226724

猜你喜欢

转载自blog.csdn.net/cclethe/article/details/80112804