不同版本区别图
HTTP/1.0、HTTP/2.0 和 HTTP/3.0 的协议栈比较:

HTPP1.1和2.0的区别
1. 多路复用:
- HTTP/2.0 在同一连接上可以同时传输多个请求和响应(可以看作是 HTTP/1.1 中长链接的升级版本),互不干扰。HTTP/1.1 则使用串行方式,每个请求和响应都需要独立的连接,而浏览器为了控制资源会有 6-8 个 TCP 连接的限制。这使得 HTTP/2.0 在处理多个请求时更加高效,减少了网络延迟和提高了性能。
2. 二进制帧:
- HTTP/2.0 使用二进制帧进行数据传输,而 HTTP/1.1 则使用文本格式的报文。二进制帧更加紧凑和高效,减少了传输的数据量和带宽消耗。
3. 队头阻塞:
- HTTP/2 引入了多路复用技术,允许多个请求和响应在单个 TCP 连接上并行交错传输,解决了 HTTP/1.1 应用层的队头阻塞问题,但 HTTP/2 依然受到 TCP 层队头阻塞 的影响。
4. 头部压缩:
-
HTTP/1.1 支持**
Body** 压缩,Header不支持压缩。HTTP/2.0 支持对**Header** 压缩,使用了专门为Header压缩而设计的 HPACK 算法,减少了网络开销。 -
服务器推送(Server Push):
-
HTTP/2.0 支持服务器推送,可以在客户端请求一个资源时,将其他相关资源一并推送给客户端,从而减少了客户端的请求次数和延迟。而 HTTP/1.1 需要客户端自己发送请求来获取相关资源。
HTPP2.0和3.0的区别
HTTP2.0存在的问题:
1、如果有丢包请求会等待重传,阻塞后面的数据,有可能不如http1.1的多个TCP连接 TCP 以及 TCP+TLS 建立连接的延时
2、TCP 的队头阻塞并没有彻底解决 TCP 为了保证可靠传输,有一个"超时重传"机制,丢失的包必须等待重传确认
3、多路复用导致服务器压力上升,多路复用没有限制同时请求数。请求的平均数量与往常相同,但实际会有许多请求的短暂爆发,导致瞬时 QPS 暴增 4、多路复用容易 Timeout 大批量的请求同时发送,由于 HTTP2 连接内存在多个并行的流,而网络带宽和服务器资源有限,每个流的资源会被稀释,虽然它们开始时间相差更短,但却都可能超时
HTPP2.0和3.0最大两个区别,在于:
-
HOL(队头堵塞问题)解决的更加彻底
-
网络切换更加快速
1. 协议基础
-
HTTP/2 是基于TCP协议 ,它引入了帧的概念,每个帧都标识了它传输的是数据还是控制信息。这种设计使得HTTP/2可以在同一个连接上同时发送请求和响应,大大提高了效率。
-
HTTP/3 则使用了全新的传输协议QUIC (快速UDP互联网连接)。QUIC是基于UDP的 ,而不是TCP。这一改变使得HTTP/3在处理多个请求时能够更加高效,尤其是在丢包和重新传输的情况下。
2. 多路复用
-
HTTP/2 通过帧的机制实现了多路复用,即在单个连接上同时传输多个请求和响应。这减少了TCP连接的数量,从而降低了延迟。
- 但在同一个 TCP 连接中的多个流(Stream)之间并非完全独立。如果某个流出现了丢包或阻塞,可能会影响到其他流的传输,这就是所谓的 "队头阻塞" 问题(HOL)
-
HTTP/3 由于基于QUIC,其多路复用能力得到了进一步的增强。
- QUIC天生支持无阻塞的多流并行,QUIC 中的流具有更强的独立性。每个流都有自己独立的编号和状态,流之间的数据传输互不干扰。即使某个流发生了丢包或错误,也不会影响其他流的正常传输,从而进一步解决了队头阻塞问题
3. 连接建立和迁移
-
HTTP/2 在建立连接时需要**TCP的三次握手+TLS的握手(TLS1.2)**过程,这可能导致初始延迟。
-
HTTP/3 的QUIC协议将TLS集成到了传输层,QUIC集成了连接建立和加密握手的功能,显著减少了连接建立时间。QUIC支持连接迁移,即使用户的网络环境改变,也能快速恢复连接。
4. 丢包恢复
-
HTPP2.0基于 TCP 协议。当数据包丢失时,TCP 需要依赖序列号和确认应答来管理丢包,会暂停整个 TCP 流的传输,直到丢失的数据包被重新传输。
-
HTTP3.0的QUIC 拥有自己的拥塞控制算法,能够快速恢复丢失的数据包,比TCP的重传机制更为高效。
5. 安全性
-
HTTP/2 和 HTTP/3 都要求默认使用TLS加密,保证数据传输的安全性。
-
HTTP/2使用的TLS加密非强制,且加密对象是 TCP 连接中传输的应用层的数据,并不会对 TCP 头部以及 TLS 记录层头部进行加密。
-
HTTP/3由于使用QUIC,TLS1.3加密更为安全, 且是强制的。对整个数据包(包括报文头和报文体)进行了加密与认证处理。
6. 头部压缩
-
HTTP/2 使用HPACK算法压缩头部,减少了数据传输的大小和延迟。在客户端和服务器同时维护一张头信息表,所有字段都会存入这个表,生成一个索引号,就不用重复发送同样字段了,只发送索引号,减少数据量提高速度
-
HTTP/3 则进一步使用了QPACK算法,这是一种类似于HPACK但为QUIC特别优化的头部压缩算法。由于QUIC支持流的并行传输,QPACK设计时考虑了流的独立性,减少了依赖和潜在的阻塞。(本质上是多路复用+轮询)