HTTP2.0 vs HTTP3.0(面试Markdown)
HTTP/2 基于 TCP ;HTTP/3 基于 QUIC协议(UDP),这是最本质区别。
HTTP/2 回顾
- 传输层:TCP
- 应用层:二进制帧 + 多路复用
- 解决了应用层队头阻塞 ,但是 TCP层队头阻塞依旧存在
TCP的问题:一条连接里,某个数据包丢包,TCP会停止所有数据传输,等待丢包重传,同一连接下所有请求全部卡住。
- 依赖TLS做加密(HTTPS),握手需要:TCP三次握手 + TLS握手,握手RTT开销大。
HTTP/3(QUIC)核心特点
HTTP/3并没有完全抛弃HTTP2的语义,请求响应模型、头部压缩思想保留,底层传输换成QUIC(UDP之上实现)。
1. 彻底解决队头阻塞
- HTTP2:应用层多路复用,但TCP丢包,整个连接全部阻塞等待重传。
- HTTP3‑QUIC:基于UDP,每个流独立。某一个流丢包,只影响当前流,其他流正常收发数据,真正消除队头阻塞。
2. 握手更快(0‑RTT / 1‑RTT握手)
- HTTP2:TCP 3次握手 + TLS握手,至少2‑3个RTT。
- QUIC:可以做到1‑RTT完成首次连接 ;历史连接复用支持 0‑RTT,直接发送业务数据,减少握手延迟。
3. 连接迁移
QUIC连接不绑定IP+端口,依靠连接ID标识连接 。
手机网络切换:Wi‑Fi切4G,IP变了,TCP连接直接断开;QUIC可以继续复用原来连接,不需要重新握手。移动端收益巨大。
4. 内置加密
QUIC把TLS加密内置到协议内部,强制加密,不像HTTP2是TCP+TLS两层拼装。
5. 依然保留HTTP2优秀特性
- 二进制帧、多路复用、头部压缩(QPACK,HPACK改进版)、流优先级全部保留。
对比表格
| 对比项 | HTTP/2 | HTTP/3(QUIC) |
|---|---|---|
| 底层传输协议 | TCP | UDP(QUIC) |
| 队头阻塞 | 解决应用层,TCP层仍然存在 | 完全消除队头阻塞 |
| 握手开销 | TCP+TLS,2‑3RTT | 首次1‑RTT,复用0‑RTT |
| 连接迁移 | 不支持,IP变化连接断开 | 支持,依靠Connection‑ID |
| 加密 | TCP之上叠加TLS | 协议内置TLS加密 |
| 头部压缩 | HPACK | QPACK |
| 适用场景 | PC、Web服务 | 移动端、弱网、网络频繁切换场景 |
缺点(面试加分)
- UDP经过部分防火墙、运营商设备会被限制,部署普及率不如HTTP2。
- UDP没有原生可靠传输,QUIC自己实现重传、拥塞控制,内核没有优化,早期CPU开销较高。
面试口述简短版
HTTP2底层是TCP,虽然通过多路复用解决了应用层的队头阻塞,但是TCP本身丢包会造成整个连接阻塞,握手需要TCP加TLS,RTT开销高,网络切换时连接直接断掉。
HTTP3底层使用QUIC协议跑在UDP之上。它保留HTTP2大部分语义,最大优势是彻底解决队头阻塞,单个流丢包不会影响其他流;握手可以做到0‑RTT加速;支持连接迁移,手机Wi‑Fi切流量不用重连。
缺点是基于UDP,部分网络环境会拦截,目前普及度还不如HTTP2。