HTTP2、HTTP3优缺点整理

8,380 阅读3分钟

HTTP2

HTTP2 采用二进制传输将请求和数据切割为帧,http1.1基于文本格式,其中帧对数据进行顺序标识多路复用,同域名下能达到一个TCP连接传输所有的请求数据 请求都是基于流。


多路复用

多路复用代替了HTTP1.x的序列和阻塞机制,所有的相同域名请求都通过同一个TCP连接并发完成。在HTTP1.x中,并发多个请求需要多个TCP连接,浏览器为了控制资源会有6-8个TCP连接都限制。 如果开启了keep-alive,虽然可以用多次,但是同一时刻只能有一个HTTP请求

header头压缩

header第一次发送所有,之后发送差异。

头部压缩需要在支持 HTTP/2 的浏览器和服务端之间:
维护一份相同的静态字典(Static Table),包含常见的头部名称,以及特别常见的头部名称与值的组合;
维护一份相同的动态字典(Dynamic Table),可以动态地添加内容;
支持基于静态哈夫曼码表的哈夫曼编码(Huffman Coding);
静态字典的作用有两个:
1)对于完全匹配的头部键值对,例如 :method: GET,可以直接使用一个字符表示;
2)对于头部名称可以匹配的键值对,例如 cookie: xxxxxxx,可以将名称使用一个字符表示。
参考: www.cnblogs.com/cangqinglan…
header完整头部键值对 httpwg.org/specs/rfc75…

HTTP2缺点

HTTP2存在的问题
1、如果有丢包请求会等待重传,阻塞后面的数据,有可能不如http1.1的多个TCP连接 TCP 以及 TCP+TLS 建立连接的延时
2、TCP 的队头阻塞并没有彻底解决 TCP 为了保证可靠传输,有一个“超时重传”机制,丢失的包必须等待重传确认
3、多路复用导致服务器压力上升,多路复用没有限制同时请求数。请求的平均数量与往常相同,但实际会有许多请求的短暂爆发,导致瞬时 QPS 暴增
4、多路复用容易 Timeout 大批量的请求同时发送,由于 HTTP2 连接内存在多个并行的流,而网络带宽和服务器资源有限,每个流的资源会被稀释,虽然它们开始时间相差更短,但却都可能超时。

http3

是基于UDP的QUIC协议

1、解决掉http2多路复用存在的丢包的问题,不存在阻塞多个流之前没有依赖,基于ID识别一个链接,不是TCP基于IP和端口
2、QUIC 可以在网络上保留更多的在途字节。在丢包率比较高的网络下,可以提升网络的恢复速度,减少重传量。
引用,在途字节 blog.csdn.net/u014023993/…
3、由于网络存在延迟丢包、接收端处理数据与发送端发送数据的速度有差别以及接收端可能采取收到多个包以后才统一回复Ack的策略,那么发送端就需要保存“已发送但未收到Ack”的数据列表,当触发重传时,直接在该链表中找到相应需要重传的数据,重传给接收端。

持续整理