HTTP/1.1、HTTP/2、HTTP/3 的差异
HTTP 三个版本的演进,主线只有一条:解决队头阻塞(Head-of-Line Blocking)。
HTTP/1.1 的问题
文本协议,一个连接同一时刻只能处理一个请求。浏览器为绕开限制并发开 6 个连接,并发展出域名分片、雪碧图、内联资源等「优化」。这些手段本质上都是在绕协议缺陷。
HTTP/2:多路复用
二进制分帧,一个连接上多个流(stream)交错传输,彼此独立:
- 头部压缩(HPACK)消除重复头;
- 多路复用让 6 连接、域名分片成为历史;
- 服务端推送(Server Push)实际收益有限,已被多数实现弃用。
但队头阻塞没有根除:TCP 层丢一个包,所有流都要等重传。HTTP/2 把应用层的队头阻塞下沉到了 TCP 层。
HTTP/3:换掉传输层
QUIC 基于 UDP 重新实现了可靠传输:流之间真正独立,丢包只影响所在的流;连接建立与 TLS 1.3 握手合并,0-RTT 恢复会话;连接迁移(换网络不断连)对移动端友好。
| 版本 | 传输 | 队头阻塞 | 部署难点 |
|---|---|---|---|
| 1.1 | TCP | 应用层 | 无 |
| 2 | TCP | 下沉到 TCP | 无(需 TLS 或 h2c) |
| 3 | QUIC/UDP | 流级独立 | UDP 被防火墙拦截、运维熟悉度 |
升级的实际收益排序
对大多数站点,收益从大到小是:
- 上 HTTPS(HTTP/2 的前提,也是安全基线);
- HTTP/2(几乎是免费的改进);
- 优化资源本身(体积、缓存、关键路径)——比协议升级的空间大得多;
- HTTP/3(弱网、移动端场景明显)。
listen 443 ssl;
http2 on;
# HTTP/3: listen 443 quic; 加 Alt-Svc 头通告
一个实用的判断:如果站点慢的原因是「图片太大」「接口串行」,先去修那些;协议升级是锦上添花,不是雪中送炭。