HTTP各个版本特点和区别
HTTP/1.x
和 HTTP/1.0
区别
长连接:tcp链接复用,
HTTP/1.0
一条tcp连接只能发送一个请求,1.X
使用keep-alive
可以复用tcp链接,但还是会按先后顺序阻塞发送:队头阻塞。更多缓存处理首部:在
HTTP/1.0
中header主要使用Expires、If-Modified-Since作为缓存判断依据,HTTP/1.1
增加Entity tag、If-Match等条件请求,Cache-Control首部。新增
Host
首部:使用Host
指定同一IP地址的不同主机名。HTTP/1.0
默认一个IP对应一台服务器,没有此配置。新增24个错误状态码:如
409 Confict
表示请求的资源与资源的当前状态发生冲突。断点续传:新增
Range
首部,可以请求资源的部分内容。
HTTP/2.0
和 HTTP/1.x
区别
- 二进制分帧:文本传输变为二进制传输
- 将请求分别对应一个流,流由帧组成,每一帧标识属于哪个流
- 多路复用:有序变为无序
- 多个请求复用同一个tcp链接,请求分解为多个帧,乱序发送,服务器根据标识符和首部将消息重新组装起来。
- 流数据丢包会造成头部阻塞
- 首部压缩:压缩了首部字段的大小
- 服务端推送:推送html中的其他资源
为什么出现 HTTP/3.0
- HTTP/2存在一些比较严重的与TCP协议相关的缺陷
- 中间设备的僵化,只认TCP和UDP
- 兼容:基于UDP实现了类似于 TCP的多路数据流、传输可靠性等功能的
QUIC
协议
HTTP/3.0
和 HTTP/2.0
区别
基于的传输层协议不一样:
HTTP/2.0
基于tcp
,HTTP/3.0
基于UDP
的QUIC
协议:实现了类似于 TCP的多路数据流、传输可靠性等功能减少了握手所花费的时间
实现了
HTTP/2.0
中的多路复用,实现了数据流的单独传输,解决了TCP队头阻塞的问题
HTTP/3.0
面临的挑战
浏览器和服务器不能很好的支持
系统对
UDP
协议的优化没有TCP
好中间设备对
UDP
的优化也没有TCP
,丢包率很高