HTTP/2和HTTP/3是互联网协议的两个重要版本,它们在性能和设计上有显著区别,主要体现在以下几个方面:
1. 协议基础
HTTP/2 是基于二进制的协议,不再是纯文本。它引入了帧的概念,每个帧都标识了它传输的是数据还是控制信息。这种设计使得HTTP/2可以在同一个连接上同时发送请求和响应,大大提高了效率。
HTTP/3 则使用了全新的传输协议QUIC(快速UDP互联网连接)。QUIC是基于UDP的,而不是TCP。这一改变使得HTTP/3在处理多个请求时能够更加高效,尤其是在丢包和重新传输的情况下。
2. 头部压缩
- HTTP/2 使用HPACK算法压缩头部,减少了数据传输的大小和延迟。HPACK可以有效地减少重复的头部信息,每次只传输变动的部分。
- HTTP/3 则进一步使用了QPACK,这是一种类似于HPACK但为QUIC特别优化的头部压缩算法。由于QUIC支持流的并行传输,QPACK设计时考虑了流的独立性,减少了依赖和潜在的阻塞。
3. 多路复用
- HTTP/2 通过帧的机制实现了多路复用,即在单个连接上同时传输多个请求和响应。这减少了TCP连接的数量,从而降低了延迟。
- HTTP/3 由于基于QUIC,其多路复用能力得到了进一步的增强。QUIC天生支持无阻塞的多流并行,即使其中一个传输流遇到问题,也不会影响到其他流。
4. 连接建立和恢复
- HTTP/2 在建立连接时需要TCP的三次握手加上TLS的握手过程,这可能导致初始延迟。
- HTTP/3 的QUIC协议将TLS集成到了传输层,可以在一次握手过程中完成加密和连接的建立,显著减少了连接建立时间。此外,QUIC支持连接迁移,即使用户的网络环境改变,也能快速恢复连接。
5. 安全性
- HTTP/2 和 HTTP/3 都要求默认使用TLS加密,保证数据传输的安全性。HTTP/3由于使用QUIC,加密更为深入和集成。
6.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”的数据列表,当触发重传时,直接在该链表中找到相应需要重传的数据,重传给接收端。
总结
总的来说,如果把HTTP/2比作是优化过的汽车,那HTTP/3就像是直升飞机,它不仅飞得快,而且即使前面有障碍也不会轻易停下。想要网站速度更快,HTTP/3无疑提供了更好的选择。