HTTP/2 与 HTTP/3 协议差异
1. 面试题
Q: HTTP/2 相比 HTTP/1.1 有哪些改进?HTTP/3 又是为了解决什么问题?
2. 核心解答
(1) HTTP/2 (基于 TCP)
HTTP/2 是对 HTTP/1.1 的重大升级,主要解决了队头阻塞 (Head-of-Line Blocking) 和Header 冗余的问题。
- 二进制分帧 (Binary Framing):将传输信息分割为更小的消息和帧,并采用二进制编码(而非文本)。这是 HTTP/2 性能增强的核心。
- 多路复用 (Multiplexing):在同一个 TCP 连接上,客户端和服务器可以同时发送多个请求或响应,互不干扰。彻底解决了 HTTP/1.1 的 "队头阻塞" 问题(仅限应用层)。
- 头部压缩 (HPACK):通信双方维护一张 Header 索引表,只发送索引号,大大减少了 Header (如 Cookie, User-Agent) 的开销。
- 服务端推送 (Server Push):服务端可以在客户端请求 index.html 时,顺便把 style.css 推送过去。
(2) HTTP/3 (基于 QUIC/UDP)
虽然 HTTP/2 解决了应用层的队头阻塞,但TCP 协议本身存在队头阻塞(如果丢失一个包,整个 TCP 窗口都要等待重传)。HTTP/3 抛弃了 TCP,改用基于 UDP 的 QUIC 协议。
- 0-RTT 连接:建立连接时,无需 TCP 的 3 次握手,最快可以 0-RTT 发送数据。
- 解决 TCP 队头阻塞:在 QUIC 中,一个流 (Stream) 的丢包不会影响其他流。
- 连接迁移 (Connection Migration):基于 Connection ID 而非 IP+Port。当用户从 Wi-Fi 切换到 4G 时,IP 变了,但连接可以保持不断。
3. 面试加分项
Q: HTTP/2 的多路复用有什么缺点?
在网络环境较差(丢包率高)的情况下,HTTP/2 的表现可能不如 HTTP/1.1。因为 TCP 为了保证可靠传输,一个包丢失会让随后所有的包都阻塞等待,而 HTTP/2 只有一个 TCP 连接,所以影响范围是所有请求。这正是 HTTP/3 诞生的原因。
4. 总结
- HTTP/1.1: 文本协议,有队头阻塞,Header 冗余。
- HTTP/2: 二进制,多路复用,HPACK,Server Push。
- HTTP/3: 基于 UDP (QUIC),0-RTT,无 TCP 队头阻塞,连接迁移。