http不同版本的区别
前言
参考了其他大佬的博文,自己做的精练总结,希望面试的时候能用上。
思维导图附上:(有水印,将就一下)
一、http0.9
最初版本,只支持GET请求,没有请求头和响应头概念。仅能请求访问HTML格式的资源。局限性很强。
二、http1.0
-
请求方式新增了POST, DELETE, PUT, HEADER
-
增添了请求头和响应头
包含头信息(HTTP header)和其他元信息,包括状态码(status code)、多字符集支持、多部分发送(multi-part type)、权限(authorization)、缓存(cache)、内容编码(content encoding) -
支持图片,视频,二进制代码传输
根据Content-Type可以支持多种数据格式,支持image,text等格式 -
服务器连接后,立即断开tcp连接
无法保持长连接,每次发送请求,都需要进行一次tcp连接(即3次握手4次挥手),使得网络的利用率非常低。
无连接带来的问题:
1.队头阻塞:
前一个请求收到响应之后,再发送下一个请求。如果前一个请求非常耗时则发生阻塞。后面请求回=会一直处于等待状态,获取不到资源
2.无法复用:发送相同请求需要重新建立一个tcp请求,经过三次握手四次挥手后,服务器返回结果。导致不必要的网络资源浪费。
三、http1.1
- 长连接
发送相同请求不需要重新建立一个tcp请求,服务器直接返回结果,设置keeplive
- 管道化
无需等上一个连接响应,下一请求发送。但响应结果必须按照顺序。无法解决队头阻塞。
缓存处理
- 缓存处理
设置字段cache-control来控制缓存,如有发送请求的时候,如有缓存,直接返回结果。
- 断点传输
在上传/下载资源时,如果资源过大,将其分割为多个部分,分别上传/下载,如果遇到网络故障,可以从已经上传/下载好的地方继续请求,不用从头开始,提高效率
四、http2.0
- 二进制分帧
一个彻底的二进制协议,头信息和数据体都是二进制,并且统称为"帧"(frame):头信息帧和数据帧。帧带来的好处,解析速度快,提高传输效率
- 多路复用
在一个连接里,客户端和浏览器都可以同时发送多个请求或回应,而且不用按照顺序一一对应,这样就避免了"队头堵塞"。
例如:请求A->请求B->响应B->响应A
- 头部压缩
由于建立的是无状态的,每次都需带头部信息。造成网络资源大量浪费
一方面:客户端和服务器同时维护一张头信息表,,所有字段都会存入这个表,生成一个索引号。每次传输只需要传输索引号。即可。
另一方面:头信息使用gzip或compress压缩后再发送
- 服务器推送
HTTP/2 允许服务器未经请求,主动向客户端发送资源
到这就结束了。
座右铭:
在因上努力,在果上随缘。