一、HTTP/1.1 相比 1.0 性能改进
1)TCP 长连接改善 HTTP/1.0 短连接性能开销
2)支持 管道(pipeline)网络传输,请求发出,不必等其回来发第二个,减少响应时间
HTTP/1.1 性能瓶颈:
1)头部未压缩,信息越多延迟越大。只能压部分Body,首部冗长,发送相同首部浪费
2)队头阻塞:按请求顺序响应,如服务器响应慢
3)没请求优先级控制:只能从客户端开始,服务器被动
二、1.1 的性能瓶颈,HTTP/2 做了什么优化?
1. 头部压缩
同时发出多个请求,头一样或相似,协议消除重复
就是HPACK 算法:维护头信息表,生成一个索引号,不发送同样字段,只发送索引号,提高速度。
2. 二进制格式
1.1 纯文本形式的文,2 二进制格式:头信息帧和数据帧,统称为帧(frame)
报文区别:直接解析二进制报文,无需将明文报文转成二进制,增加传输效率。
3. 数据流
数据流(Stream):请求/回应所有数据包,独一无二的编号,客户端发出奇数, 服务器偶数,可指定优先级
不按顺序发送的,同连接里连续数据包,可能属于不同回应。标记数据包属于哪个回应
4. 多路复用
一个连接中可并发多个请求或回应,不用按照顺序一一对应。移除串行请求,解决队头阻塞
例:TCP 连接里,服务器收客户端 A 和 B 请求,A 耗时,回应 A 请求已处理部分,接着回应 B,再回应 A 剩下部分。
5. 服务器推送
改善“请求 - 应答”,服务也可主动发
例:浏览器刚请求 HTML ,提前把可能用JS、CSS 文件等静态资源主动发给客户端,减少延时,就是推送
三、2 有哪些缺陷?HTTP/3 做哪些优化
2 主要问题:
1)多个 HTTP 请求复用一个 TCP,TCP 不知道多少个HTTP
2)丢包触发 TCP 重传,所有HTTP 请求都等待。1.1 pipeline阻塞,2 丢包阻塞
3 改变
1)把 HTTP 下层TCP 协议改成UDP(不管顺序,不管丢包)
UDP 不可靠,基于 UDP 的QUIC 协议(丢包时,阻塞这个流,其他流不受影响) 可实现类似 TCP 可靠性传输。
2)头部压缩算法升级成QPack
HTTPS 建立连接,6 次交互,先建三次握手,然后TLS/1.3 的三次握手。QUIC 合并成了 3 次
ps:TCP HTTPS(TLS/1.3) 和 QUIC HTTPS
QUIC:在UDP之上伪TCP + TLS + HTTP/2 多路复用协议。
新协议,很多网络设备,不知道,只当UDP,出现新问题
HTTP/3 普及慢,不知道UDP 是否能逆袭 TCP
https://mp.weixin.qq.com/s/bUy220-ect00N4gnO0697A
网友评论