HTTP协议特性
HTTP是不保存状态的协议
- HTTP是一种无状态协议,也就是说HTTP协议本身并不保留之前一切的请求或响应报文的信息,这么做的好处是可以更快的处理大量事物,确保协议的可伸缩性。
- 随着Web的不断发展,人们期望HTTP具有保存状态的功能,所以引入了Cookie技术
- Cookie会根据从服务器端发送的响应报文内的一个叫做Set-Cookie的首部字段信息,来通知客户端保存Cookie。
- 当下次客户端再往该服务器发送请求时,客户端会自动在请求报文中加入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等资源
- 内容编码:
- 分块传输编码:
分块传输编码会将实体主体分为多个小块,用十六进制来标记每块的大小,最后一块使用“0(CR+LF)”来标记。
使用分块传输编码的实体主体会由接收的客户端进行解码,恢复到编码前的实体主体
- 传输编码(HTTP/1.1):
最后
本文只供学习交流之用,尊重他人劳动成果,转载请注明出处。
Comments
Post a Comment