http 1.0
- 一次请求一次连接
2)可以并行连接,建立多个tcp链路,占用服务器资源比较多
http 1.1
优点:
- 可以保存持久连接,多个请求共享一个tcp链路,可以节省建立链接的时间。
2)支持流水线方法,可以并行发起多个请求,服务器依次响应请求。
缺点:
1) 服务器按序响应问题,一些小对象可能不得不等待大对象传输完才能传输
2)任何传输丢失,都会对后续的传输造成影响,毕竟恢复丢失需要花一些时间
http 2.0
1)客户端可以定义请求的优先级别,服务端可以根据优先级别进行处理
2)将对象分割成多个帧,调整这些帧的传输次序来缓解头部阻塞
3)可以先向客户端推送一些它可能需要的对象
4)支持二进制编码,效率高
5)支持头部压缩,用编码表示相同的头部,减少传输的数据量
存在的问题
1)H0L阻塞:仍然在一个TCP连接上,恢复一个段的丢失,仍然要停止所有后续对象的传输
2)和http1.1 一样,浏览器可以同时打开多个并行连接减少这种停顿,增加了总体的吞吐量,但增加了服务器的负担
3)安全受限
http2.0 + tls
1)可以解决安全性问题,但握手交互次数比较多,慢启动
2)HOL阻塞的问题依然存在
3)基于丢失的拥塞控制吞吐抖动
4)TCP实现可靠性的恢复时间长,效率低,在一个TCP连接上传输,就会有头部阻塞的问题。
5)IP地址变化,TCP连接无法维持,移动性支持不好
问题的根源:
1)受地产tcp和tls协议的影响
2)享受了tcp上开发的便利,但必须忍受其限制
对策:在 UDP之上开发新的传输协议 QUIC, http 挪到QUIC上