本文共 1709 字,大约阅读时间需要 5 分钟。
HTTP/2 协议详解
HTTP/2 是 HTTP/1.x 的升级版,它通过引入二进制分帧、多路复用流等机制显著提升了网络性能。然而,在深入理解 HTTP/2 之前,我们需要回顾 HTTP/1.x 的基本机制及其局限性。
HTTP/1.x 是一个明文协议,其请求和响应全部以文本形式传输。例如,一个典型的 HTTP 请求如下:
GET / HTTP/1.1Host: jiajunhuang.com
服务器可能返回一个类似的响应:
HTTP/1.1 101 Switching ProtocolsConnection: UpgradeUpgrade: h2c
HTTP/1.x 每次请求都建立独立的 TCP 连接,导致高延迟和资源浪费。例如,浏览页面时,每个静态资源都需要单独连接,导致 32 个资源下载需要 32 秒。
HTTP/2 架构提高了性能,主要通过以下特性:
HTTP/2 社区意识到 HTTP/1.x 解析效率低下,通过分帧优化:
+----------------+| Length (24) |+----------------+| Type (8) |+----------------+| Flags (8) |+----------------+| R (1) |+----------------+| Stream ID (31)|+----------------+| Payload (...) |+----------------+
HTTP/2 请求可能如下:
[:length=24 bytes]Type: 0x00000000 (数据帧)Flags: 0x00000000Stream ID: 1Payload: 本次请求的内容
流是 HTTP/2 的核心,通过唯一流ID区分不同请求/响应。
客户端和服务器各占用奇数和偶数流ID,确保不冲突。
流状态包括 idle、open、closed 等,状态转换由帧类型决定。
流可以定义依赖关系和优先级,例如:
A --> B(C)
B 依赖 A,C 依赖 B,优先级可通过权重调整。
HTTP/2 采用压缩算法(如 Huffman)压缩头部,提升效率。
SETTINGS 用于自定义连接参数,如最大帧大小。
从 HTTP/1.x 升级:
GET / HTTP/1.1Host: server.example.comConnection: UpgradeUpgrade: h2c
通过以上改进,HTTP/2 在性能、资源利用和扩展性上显著提升。
转载地址:http://okbxz.baihongyu.com/