HTTP/2 多路复用
字数 1086 2025-11-22 20:06:44
HTTP/2 多路复用
HTTP/2 多路复用是一种在单个 TCP 连接上同时传输多个 HTTP 请求和响应的技术。它解决了 HTTP/1.x 协议中的性能瓶颈,允许浏览器更高效地加载网页资源。
步骤 1:理解 HTTP/1.x 的性能瓶颈
在 HTTP/1.1 中,浏览器与服务器建立 TCP 连接后:
- 每个请求必须等待前一个响应完成才能发送(队头阻塞)
- 浏览器通常需要建立 6-8 个并行 TCP 连接来加速加载
- 每个连接都需要经历 TCP 三次握手和 TLS 握手过程
- 大量重复的请求头信息被传输(如 Cookie、User-Agent)
步骤 2:认识 HTTP/2 的帧结构
HTTP/2 将通信分解为二进制帧:
- 帧是最小的通信单位,包含帧头(9字节)和载荷
- 帧类型包括:HEADERS、DATA、SETTINGS、PRIORITY 等
- 每个帧都有唯一的流标识符,标识所属的请求/响应流
- 帧可以在连接上交错发送,接收方根据流标识符重组
步骤 3:掌握流的概念
流是 HTTP/2 中的核心抽象:
- 流是连接中的一个虚拟信道,承载双向消息交换
- 每个流有唯一整数标识,客户端发起的流为奇数,服务器为偶数
- 流可以设置优先级,高优先级流优先分配资源
- 流可以依赖其他流,形成依赖树,优化关键资源加载
步骤 4:了解多路复用的工作机制
多路复用的具体实现:
- 浏览器建立单个 TLS 连接
- 将页面资源(HTML、CSS、JS、图片)分解为多个流
- 所有流的帧在连接上交错传输
- 服务器并行处理请求,响应帧也交错返回
- 客户端根据流标识符重组完整响应
步骤 5:认识流量控制机制
HTTP/2 提供精细的流量控制:
- 基于信用机制的窗口控制
- 每个流都有独立的流量窗口
- 防止接收方被大量数据淹没
- 支持动态调整窗口大小
步骤 6:理解头部压缩(HPACK)
多路复用配合头部压缩:
- 使用 HPACK 算法压缩请求头
- 维护静态表和动态表存储常见头部字段
- 将文本头部转换为索引引用
- 典型请求头从几百字节压缩到几十字节
步骤 7:实际性能影响
多路复用在真实环境中的效果:
- 减少 TCP 连接数,降低握手开销
- 消除队头阻塞,提高连接利用率
- 更好的优先级处理,优化用户体验
- 对高延迟网络环境改善尤为明显
步骤 8:部署考虑
实施 HTTP/2 的要求:
- 服务器必须支持 HTTP/2 协议
- 通常需要 TLS 加密(浏览器要求)
- 保持与 HTTP/1.1 的兼容性
- 考虑服务器资源分配策略
这种技术使得现代网页能够更快加载,特别是在包含大量小文件的场景下,性能提升可达 50% 以上。