外观
一句话答案
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.1 | HTTP/2 | HTTP/3 |
|---|---|---|---|
| 多路复用 | ❌ | ✅ | ✅ |
| 队头阻塞 | 严重 | 应用层解决,传输层仍有 | 完全解决 |
| 头部压缩 | ❌ | ✅ HPACK | ✅ QPACK |
| 底层协议 | TCP | TCP | QUIC(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彻底独立。