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,丢包率很高
