HTTP协议特性

HTTP是不保存状态的协议

  • HTTP是一种无状态协议,也就是说HTTP协议本身并不保留之前一切的请求或响应报文的信息,这么做的好处是可以更快的处理大量事物,确保协议的可伸缩性。
  • 随着Web的不断发展,人们期望HTTP具有保存状态的功能,所以引入了Cookie技术
Cookie技术通过在请求和响应报文中写入Cookie信息来控制客户端的状态。
  1. Cookie会根据从服务器端发送的响应报文内的一个叫做Set-Cookie的首部字段信息,来通知客户端保存Cookie。
  2. 当下次客户端再往该服务器发送请求时,客户端会自动在请求报文中加入Cookie值后发送出去
  3. 服务端发现客户端发送过来的Cookie后,会去检查究竟是从哪一个客户端发来的请求,通过对比服务器上的记录,得到之前的状态信息
请求报文(没有Cookie):
GET /READER/ HTTO1.1
Host: hackr.jp
//首部字段没有Cookie的相关信息

响应报文(服务器端生成Cookie):
HTTP/1.1 200 OK
DATE: Sat, 24 Feb 2018 19:46:20 GMT
Server: Apache
<Set-Cookie: sid=1342077140226724; path=/; expires=Sat, 24-Feb-18 07:12:20 GMT>
Content-Type: text/plain; charset=UTF-8

请求报文(客户端自动在请求报文中加入Cookie):
Get /image/ HTTP/1.1
Host: hackr.jp
Cookie: sid=1342077140226724


持久连接

HTTP初始版本中(HTTP 1.0版本),每进行一次HTTP通信就要断开一次TCP连接(也就是“短连接“),
为了解决这个问题HTTP1.1加入了持久连接 (”长连接“)特性。
  • 特点:只要有一端没有明确提出断开连接,则保持TCP连接状态。
  • 好处:减少了TCP连接的重复建立和断开所造成的额外开销,减轻了服务器端的负担,同时也节省了通讯的时间,使得Web界面的显示速度提高了不少。


管线化

持久连接使得多数请求以管线化方式发送成为了可能。
管线化技术出现后,客户端不用等待服务器响应就可以直接发送下一请求。

                                                 //也就是做到了并行发送多个请求


编码提升传输速率

索引:通过在传输时编码,能有效地处理大量的访问请求。
但是,编码的操作需要计算机来完成
因此会消耗更多的CPU等资源

  • 内容编码:
内容编码指明应用在实体内容上的编码格式,并保持实体信息原样压缩。内容编码后的实体由客户端接收并解码

  • 分块传输编码:
在HTTP通信过程中,请求的编码实体资源尚未全部完成之前,浏览器无法显示请求页面,在传输大容量数据时,通过把数据分割成多块,实现浏览器逐步显示页面。

分块传输编码会将实体主体分为多个小块,用十六进制来标记每块的大小,最后一块使用“0(CR+LF)”来标记。
使用分块传输编码的实体主体会由接收的客户端进行解码,恢复到编码前的实体主体

  • 传输编码(HTTP/1.1):
它可以在通信时按某种编码方式传输,但只定义作用于分块传输编码中。



最后

本文只供学习交流之用,尊重他人劳动成果,转载请注明出处。

Comments

Popular posts from this blog

抓包工具Wireshark下载及安装教程

Java中Synchronized的用法