HTTP/2 的多路复用

163 阅读2分钟

HTTP/2 的多路复用(Multiplexing)是其核心特性之一,旨在解决 HTTP/1.1 中的队头阻塞(Head-of-Line Blocking)问题,提升传输效率。以下是其原理和工作机制:

1. 二进制分帧层

HTTP/2 在应用层和传输层之间引入了二进制分帧层,将请求和响应分解为更小的帧(Frame),每个帧带有流标识符(Stream ID),用于标识所属的流。

2. 流(Stream)

流是 HTTP/2 中的双向通信通道,每个流有唯一的 Stream ID,用于标识请求和响应的对应关系。一个 TCP 连接可以承载多个流,实现并发传输。

3. 帧(Frame)

帧是 HTTP/2 的最小通信单位,包含以下部分:

  • 长度:帧的长度。
  • 类型:帧的类型(如 HEADERS、DATA 等)。
  • 标志:控制帧行为的标志。
  • 流标识符:标识帧所属的流。
  • 帧负载:实际传输的数据。

4. 多路复用机制

  • 并发传输:多个流的帧可以在同一个 TCP 连接上交替传输,接收方通过 Stream ID 重新组装。
  • 优先级:可以为流设置优先级,确保重要资源优先传输。
  • 流量控制:通过窗口机制控制每个流的传输速率,防止某一流占用过多带宽。

5. 优势

  • 减少延迟:避免了 HTTP/1.1 的队头阻塞,多个请求和响应可以同时传输。
  • 高效利用连接:单个 TCP 连接可以处理多个请求,减少连接建立的开销。
  • 提升性能:通过优先级和流量控制,优化资源加载顺序和带宽使用。

总结

HTTP/2 的多路复用通过二进制分帧、流和帧的机制,实现了在单个 TCP 连接上并发传输多个请求和响应,显著提升了传输效率和性能。