HTTP/1.1、HTTP/2、HTTP/3演变
一、HTTP1.1比较HTTP1.0提升的地方
- 使用长连接改善了短连接造成的性能消耗
- 支持管道网络传输,减少整体的响应时间
HTTP1.1的性能瓶颈
- 请求头未经压缩就发送,只能压缩Body的部分
- 发送冗长的首部。每次互相发送相同的首部造成浪费
- 服务器是按请求的顺序响应的,易造成对头阻塞
- 没有请求优先级控制
- 请求只能从客户端开始,服务器只能被动响应
二、HTTP2的优化
HTTP2是基于HTTPS的,所以HTTP2的安全性是有保障的
头部压缩
HPACK算法:在客户端和服务器同时维护一张头信息表,所有的字段都会存入这张表,生成一个索引号,以后不发送同样的字段,直接发送索引号,这样就提高速度了。
二进制格式
HTTP2不再像HTTP1.1里的纯文本形式的报文,而是全面使用二进制格式,统称为帧:头信息帧和数据帧,增加了数据传输的效率。
数据流
每个请求或回应的所有数据包,称为⼀个数据流( Stream )。每个数据流都标记着⼀个独一无二的编号,其中规定客户端发出的数据流编号为奇数, 服务器发出的数据流编号为偶数 客户端还可以指定数据流的优先级。优先级高的请求,服务器就先响应该请求。
多路复用
TTP2是可以在一个连接中并发多个请求或回应,而不是按照顺序一一对应。降低了延迟,大幅度提高了连接的利用率。例如在⼀个TCP连接⾥,服务器收到了客户端 A 和 B 的两个请求,如果发现 A 处理过程非常耗时,于是就回应 A 请求已经处理好的部分,接着回应 B 请求,完成后,再回应 A 请求剩下的部分。
服务器推送
服务器不再是被动地响应,可以主动向客户端发送消息。
三、针对HTTP2的缺陷,HTTP做的优化
HTTP2的缺陷
HTTP/2 多个请求复⽤⼀个TCP连接,⼀旦发生丢包,就会触发TCP的重传机制,就会阻塞住所有的 HTTP 请求。
优化
HTTP3直接把下层的TCP协议改成了UDP。
但是UDP又是不可靠传输,但是基于UDP的QUIC协议可以实现类似TCP的可靠传输。
- QUIC 有⾃⼰的⼀套机制可以保证传输的可靠性的。当某个流发⽣丢包时,只会阻塞这个流,其他流不会受到 影响。
- TLS3 升级成了最新的 1.3 版本,头部压缩算法也升级成了 QPack 。
- HTTPS 要建立⼀个连接,要花费 6 次交互,先是建立三次握手,然后是 TLS/1.3 的三次握手。QUIC 直接 把以往的 TCP 和 TLS/1.3 的 6 次交互合并成了 3 次,减少了交互次数。