HTTP/1.1 与 HTTP/2.0 的核心区别:
1. 协议格式
- HTTP/1.1:基于文本格式(明文协议),可读性好,但解析复杂。
- HTTP/2:基于二进制格式(二进制分帧),解析高效,支持多路复用。
2. 多路复用(Multiplexing)
- HTTP/1.1:
- 每个 TCP 连接只能串行处理请求(队头阻塞)。
- 通过多个 TCP 连接(如浏览器默认开 6~8 个)提升并发,但资源消耗大。
- HTTP/2:
- 单个 TCP 连接支持并行处理多个请求和响应(通过二进制分帧)。
- 彻底解决队头阻塞(应用层),无需多开连接。
3. 头部压缩(Header Compression)
- HTTP/1.1:每次请求需携带完整头部(冗余,如
Cookie
、User-Agent
)。 - HTTP/2:
- 使用 HPACK 算法压缩头部,通过维护静态表和动态表减少重复传输。
- 头部大小减少约 50%~90%。
4. 服务器推送(Server Push)
- HTTP/1.1:客户端需主动请求资源(如 CSS、JS)。
- HTTP/2:
- 服务器可主动推送资源到客户端缓存(如提前推送页面依赖的 CSS 文件)。
- 减少请求往返次数,提升页面加载速度。
5. 优先级与流量控制
- HTTP/1.1:依赖浏览器自行优化资源加载顺序(如优先加载 CSS)。
- HTTP/2:
- 支持为请求设置优先级(如优先加载关键资源)。
- 流量控制机制更精细(基于流的带宽分配)。
6. 性能对比
场景 | HTTP/1.1 | HTTP/2 |
---|---|---|
高延迟网络 | 多个连接并行,效率低 | 单连接多路复用,延迟影响更小 |
资源密集型页面 | 需大量 TCP 连接,易拥塞 | 单连接高效复用,减少拥塞 |
小文件请求 | 头部冗余导致带宽浪费 | 头部压缩显著减少开销 |
示例说明
- HTTP/1.1 的队头阻塞:
请求 A → 响应 A → 请求 B → 响应 B (串行,后请求需等待前响应)
- HTTP/2 的多路复用:
请求 A、B、C → 帧交错传输 → 响应 A、B、C (并行,无需等待)
总结
- HTTP/2 核心优势:
- 多路复用解决队头阻塞。
- 头部压缩降低开销。
- 服务器推送优化资源加载。
- 兼容性:
- HTTP/2 需 HTTPS(主流浏览器强制要求)。
- 完美向下兼容 HTTP/1.1。
一句话:HTTP/2 通过二进制分帧、多路复用和头部压缩,显著提升了传输效率和性能,解决了 HTTP/1.1 的并发限制与冗余问题。