← 返回文章列表
浏览器与网络·30 次阅读

HTTP/2 与 HTTP/3:协议演进带来了什么

HTTP/2 与 HTTP/3:协议演进带来了什么

HTTP/1.1 的瓶颈

  • 队头阻塞(HOL):同一连接上的请求必须串行响应,前一个没回来后面全等着。浏览器为了并发,只能对同域名开 6 个左右 TCP 连接,连接管理开销大
  • 每次请求都重复发送大量文本头部,冗余明显
  • 只能在应用层做雪碧图、域名分片、资源合并等优化,本质都是绕协议的坑

HTTP/2 的核心改进

1. 二进制分帧 + 多路复用

数据拆成带流 ID 的二进制帧,多个请求/响应可以在同一条 TCP 连接上并发交错传输,互不阻塞(应用层不再有队头问题)。六个连接的 workaround 成为历史。

2. 头部压缩 HPACK

静态/动态表 + 哈夫曼编码,重复头只传索引,大幅减小请求开销。

3. 服务器推送(Server Push)

服务器可主动推送客户端可能需要的资源(该特性后来被 Chrome 移除,实际收益有争议,了解即可)。

4. 流优先级与流量控制,可标注关键资源优先。

代价是:所有请求复用一条 TCP 连接,TCP 层的队头阻塞仍在——一个 TCP 包丢失,整条连接的所有流都要等重传。

HTTP/3:换到 QUIC

HTTP/3 把传输层从 TCP 换成基于 UDP 的 QUIC:

  • QUIC 原生多路复用,流之间真正独立——某个流丢包只阻塞该流,解决 TCP 层队头阻塞
  • 连接建立与 TLS 握手合并(0/1-RTT),弱网和移动网络下更快
  • 连接迁移:网络从 WiFi 切到 4G(IP 变化),用连接 ID 标识可以平滑续接不断连
  • 内置加密,安全性进一步提升

实际部署现状

  • HTTP/2 已非常普及,Nginx/Caddy/CDN 开启简单,浏览器普遍支持(要求 HTTPS)
  • HTTP/3/QUIC 主流 CDN 和浏览器支持度已相当高,Nginx 新版本、Caddy 可直接启用
  • 应用代码基本无感,是传输层升级;升级协议前先用性能数据确认瓶颈确实在连接层

一张图总结

HTTP/1.1:文本、串行 → 多 TCP 连接
HTTP/2:  二进制帧、单连接多路复用(解决应用层 HOL)
HTTP/3:  QUIC over UDP、独立流(解决传输层 HOL + 更快握手)

协议演进的主线非常清晰:不断消除"排队等待"、不断合并往返。对前端而言,知道这些底层变化,就能理解为什么很多老优化手段(域名分片、雪碧图)在现代协议下反而可能帮倒忙。

看到这里了?如果这篇文章帮到过你

请我喝瓶可乐就好 🥤

收款码

评论0 条

还没有评论,来抢沙发~

发表评论

评论需审核后显示

© 2026 许冬博客 · 专注 JS 技术分享

·RSS 订阅·Powered by Nuxt 4