type
status
date
slug
summary
tags
category
icon
password
HTTP/2 是对 HTTP 协议的重大更新,旨在解决 HTTP/1.1 在现代网络环境中面临的若干性能问题。以下是 HTTP/2 解决的一些主要问题:
1. 多路复用(Multiplexing)
- HTTP/1.1 的问题:即使在
keep-alive
连接中,每个 HTTP 请求/响应也必须遵循一个顺序,这导致了“线头阻塞”(head-of-line blocking)问题,即单个慢请求会阻塞后续请求。
- HTTP/2 的解决方案:引入多路复用,允许在单个 TCP 连接上同时发送多个请求和响应,每个请求或响应为一个独立的帧,这些帧可以交错发送并独立处理,从而消除线头阻塞问题。
2. 头部压缩(Header Compression)
- HTTP/1.1 的问题:HTTP/1.1 的头部未压缩,每次请求都重复发送相同的头部,造成额外的数据传输和延迟。
- HTTP/2 的解决方案:采用 HPACK 压缩格式来压缩请求和响应的头部信息,减少了重复头部信息的传输,降低了带宽使用和延迟。
3. 服务器推送(Server Push)
- HTTP/1.1 的问题:客户端无法接收到它还没请求的资源,需要等待客户端的请求才能响应。
- HTTP/2 的解决方案:服务器推送允许服务器主动发送客户端可能需要的资源,而无需客户端明确请求,从而减少延迟。
4. 流控制(Flow Control)
- HTTP/1.1 的问题:没有有效的机制来控制数据流量,防止接收方被发送方发送的数据量所淹没。
- HTTP/2 的解决方案:引入了流控制机制,允许接收方控制发送方的数据流量,保证数据传输的平衡和高效。
5. 优先级和依赖性(Prioritization and Dependency)
- HTTP/1.1 的问题:没有机制来指定某些资源的加载优先级。
- HTTP/2 的解决方案:引入了优先级和依赖性的概念,允许客户端指定请求之间的优先级,使得重要资源可以优先加载。
通过这些改进,HTTP/2 显著提高了网络通信的效率和性能,特别是在高延迟的网络环境中。这些特性使得 HTTP/2 成为现代 Web 应用的理想选择,尤其是对于需要快速加载大量资源的复杂页面和应用。
- 作者:奥利弗
- 链接:https://www.aolifu.org/article/http2
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。