Skip to content
进阶

一句话答案

HTTP/2 改进:多路复用(一个连接并行多请求)、头部压缩(HPACK)、服务器推送、二进制帧。

核心要点

HTTP/1.1(1997):

+ 持久连接(Keep-Alive):复用 TCP 连接,减少建连开销
+ 管线化(Pipelining):可以连续发送请求,但服务端必须按顺序响应

问题:
  队头阻塞(Head-of-Line Blocking):前一个请求卡住,后续请求全部等待
  Header 重复:每次请求都携带完整 Header(Cookie 等),浪费带宽
  并发靠多开 TCP 连接(浏览器通常 6~8 个并发连接/域名)

HTTP/2(2015):

+ 多路复用(Multiplexing):同一 TCP 连接上并发多个请求/响应(Stream 机制)
  → 解决了 HTTP/1.1 的应用层队头阻塞
+ 头部压缩(HPACK):静态表+动态表+霍夫曼编码,大幅减少 Header 体积
+ 服务器推送(Server Push):服务端可以主动推送客户端需要的资源
+ 二进制分帧(Binary Framing):传输更高效(vs HTTP/1.1 的文本格式)

遗留问题:
  TCP 层的队头阻塞仍然存在:
  TCP 是字节流,一个 TCP 包丢失 → 整条连接上所有 Stream 都要等待重传

HTTP/3(2022,基于 QUIC):

+ 底层协议从 TCP 换成 QUIC(基于 UDP 实现的可靠传输协议)
+ 彻底解决队头阻塞:QUIC 的 Stream 独立,一个 Stream 丢包不影响其他 Stream
+ 0-RTT / 1-RTT 连接建立:QUIC 将 TLS 握手和传输握手合并,减少往返次数
+ 连接迁移:基于 Connection ID 而非 IP+端口四元组,WiFi 切换 4G 后连接不中断

代价:UDP 穿越防火墙可能被封锁,部分网络环境下回退到 HTTP/2

总结对比:

特性HTTP/1.1HTTP/2HTTP/3
多路复用
队头阻塞严重应用层解决,传输层仍有完全解决
头部压缩✅ HPACK✅ QPACK
底层协议TCPTCPQUIC(UDP)
TLS可选实际强制强制内置
追问与易错

追问方向:

  • HTTP/2 的多路复用解决了什么?
  • HTTP/3 和 HTTP/2 区别?
  • HTTP/2 的 Server Push 有什么用?

易错点:

  • ❌ HTTP/2 完全解决了队头阻塞——TCP 层仍有队头阻塞
  • ❌ HTTP/2 必须 HTTPS——规范不要求但浏览器要求

💡 记忆锚点

HTTP演进像修路:1.1是单车道排队通过(队头阻塞),浏览器开6条路缓解;2.0在一条路上画了多车道(多路复用),但底层TCP管道堵了全堵;3.0换成QUIC独立管道(UDP),每条车道互不影响,还能WiFi切4G不断连。口诀:1.1排队,2.0并行但TCP堵,3.0彻底独立。