HTTP/2.0是什么?
HTTP/2.0 是超文本传输协议的第二主要版本,用来把网页从服务器搬到浏览器(或 App)的“高速公路升级版”。它兼容 HTTP/1.x 的语义(URI、方法、状态码、Cookie 等都不变),但把底层传输机制彻底重做,核心目标只有一个:让同一个连接更快、更省、更稳。一句话概括:
HTTP/2 在一条 TCP 连接里,用二进制分帧同时跑多条并行流,压缩头部、还能主动推送资源。
1. 物理视角:帧(Frame)——最小“集装箱”
- 把一次请求/响应拆成若干 二进制帧(最大 16 KB),每种帧有类型、标志、流 ID。
- 常见帧:
- HEADERS:放压缩后的头部
- DATA:放真正的 body
- SETTINGS、WINDOW_UPDATE、PUSH_PROMISE、RST_STREAM……
2. 逻辑视角:流(Stream)——虚拟“车道”
- 每个请求/响应被抽象成一条 逻辑流,用 31 位 ID 标识,奇数客户端发、偶数服务端发。
- 无数帧可以交错发送,到达后再按流 ID 重组,天然多路复用,解决 HTTP/1.x 的“队头阻塞”。
3. 关键特性速览
痛点 | HTTP/1.x | HTTP/2 解法 |
---|---|---|
并发低 | 6 条连接上限 + 队头阻塞 | 一条 TCP 多路复用,百条流一起飞 |
头部冗余 | 每次请求带完整 Cookie 几百字节 | HPACK 压缩,差量更新,节省 50%+ |
服务器只能被动响应 | 浏览器必须先发请求 | PUSH_PROMISE 主动把资源推给客户端 |
无法控速 | TCP 拥塞一刀切 | 逐流/逐连接 WINDOW_UPDATE 精细流控 |
文本解析慢 & 漏洞 | \r\n 分割,易被注入 | 二进制长度前缀,解析快且安全 |
4. 生活化比喻
- HTTP/1.0 像“单车道石子路+人工收费”——每辆车(请求)得停一次缴费,堵车是常态。
- HTTP/2 变成“多车道高速+ETC”——一次领卡(连接),无数车并行跑,ETC 自动扣费(压缩),服务区还能把盒饭提前送到你车上(推送)。
5. 与 HTTP/1 完全兼容
方法、状态码、缓存、Cookie、SSL 全部照用,前端代码一行不改就能享受加速;浏览器和服务器只在传输层悄悄换成“二进制帧”。
6. 现状
- 2015 年 5 月 RFC 7540 发布,现在 95%+ 的浏览器和主流 CDN/云厂商默认开启。
- 明文版本(h2c)几乎没人用,事实强制走 TLS(ALPN 协商 “h2”)。
- 因为仍依赖 TCP,丢包时所有流一起等重传,所以新一代 HTTP/3(QUIC) 已把传输层换成 UDP,继续升级。
一句话记住:
HTTP/2 就是“把多条 HTTP/1 请求拆成二进制小帧,塞进同一条 TCP 管道里同时跑,还能压缩头部、偶尔推点资源”的协议。