HTTP/2新增的二进制分帧你如何理解?

1 个回答

  • 罗云海
    只有行动才能说明一切。
    ### 1. 二进制分帧层的引入 在 HTTP/1.1 中,客户端和服务器通过**文本格式的请求和响应**进行通信。而在 HTTP/2 中,引入了一个**二进制分帧层**,这层的作用是把所有的数据(请求、响应、数据块等)进行二进制编码,并将它们分割成多个小帧(frame),这些帧可以属于不同的消息或请求。 ### 2. 单连接的多路复用 在 HTTP/2 中,所有的请求和响应都通过**一个 TCP 连接**进行传输,多个请求的数据可以同时在这条连接上传输。为了实现这一点,HTTP/2 将每个请求和响应的数据分割成多个帧(frame),这些帧被分配了唯一的标识号(stream ID),这样服务器就可以在同一条连接上处理并交错传输多个请求的数据。 **示例**: 假设浏览器向服务器请求三个资源(A、B、C)。在 HTTP/1.1 中,浏览器需要建立三个连接,或者通过同一个连接按顺序请求,这种方式很容易阻塞。而在 HTTP/2 中,A、B、C 的数据被分成若干小帧,这些帧可以按不同顺序传输,但由于有 stream ID,浏览器可以根据标识重新组装它们,最终还原出 A、B、C 的完整数据。 ### 3. 减少了连接数的压力 单连接的设计和二进制分帧的机制,有以下几点优化: - **降低连接数**:在 HTTP/1.1 中,为了并发处理多个资源,需要建立多个连接,耗费了更多的内存和 CPU。HTTP/2 只需要一个连接就可以并行处理多个请求,极大地减少了连接数。 - **减少慢启动延迟**:TCP 连接的“慢启动”机制要求每条连接在刚开始时限制数据传输的速度,连接数越多,“慢启动”带来的延迟就越多。HTTP/2 只有一个连接,减少了“慢启动”带来的延迟。 - **减少网络拥塞**:连接数越少,网络流量的集中度就越高,拥塞和丢包的风险越小。HTTP/2 的单连接方式优化了网络资源的使用。 ### 4. 为什么二进制分帧能提升性能 二进制分帧的机制使得 HTTP/2 的单连接设计更高效: - **多路复用**:分帧让多个请求/响应的数据可以在一个连接中交错进行,避免了 HTTP/1.1 的队头阻塞。 - **更高的传输效率**:二进制格式比文本格式更紧凑,传输和解析都更快。 - **流量控制**:可以对不同帧设置优先级和流量控制,从而合理分配带宽和资源,提高传输效率。 ### 总结 HTTP/2 的二进制分帧层不仅仅是二进制传输,它引入了**多路复用**和**帧化数据传输**,实现了更高效的资源传输。
    发布于 2024-11-11 15:36 •IP属地 宁夏
    举报
    评论
    收藏