Skip to main content

2. HTTP/2 Protocol Overview (HTTP/2协议概述)

HTTP/2为HTTP语义提供了优化的传输方式。HTTP/2支持HTTP的所有核心特性,但旨在比HTTP/1.1更高效。

HTTP/2是一个面向连接的应用层协议 (Connection-Oriented Application-Layer Protocol),运行在TCP连接 ([TCP]) 之上。客户端是TCP连接的发起者。

HTTP/2中的基本协议单元是帧 (Frame, Section 4.1)。每种帧类型服务于不同的目的。例如,HEADERS和DATA帧构成了HTTP请求和响应的基础 (Section 8.1);其他帧类型如SETTINGS、WINDOW_UPDATE和PUSH_PROMISE用于支持其他HTTP/2特性。

请求的多路复用 (Multiplexing of Requests) 是通过将每个HTTP请求/响应交换与其自己的流 (Stream, Section 5) 关联来实现的。流在很大程度上彼此独立,因此被阻塞或停滞的请求或响应不会阻止其他流的进展。

多路复用的有效使用取决于流量控制和优先级排序。流量控制 (Flow Control, Section 5.2) 通过限制传输的数据为接收者能够处理的内容,确保可以高效地使用多路复用流。优先级排序 (Prioritization, Section 5.3) 确保有限的资源得到最有效的使用。此HTTP/2修订版废弃了来自 [RFC7540] 的优先级信号方案。

由于连接中使用的HTTP字段可能包含大量冗余数据,包含这些字段的帧会被压缩 (Section 4.3)。这在常见情况下对请求大小有特别有利的影响,允许将许多请求压缩到一个数据包中。

最后,HTTP/2添加了一种新的可选交互模式,服务器可以向客户端推送响应 (Section 8.4)。这旨在允许服务器推测性地向客户端发送服务器预期客户端需要的数据,以一些网络使用换取潜在的延迟增益。服务器通过合成一个请求来实现这一点,该请求作为PUSH_PROMISE帧发送。然后,服务器能够在单独的流上向合成请求发送响应。

2.1. Document Organization (文档组织)

HTTP/2规范分为四个部分:

  • 启动HTTP/2 (Starting HTTP/2, Section 3) 涵盖如何启动HTTP/2连接。

  • 帧层 (Frame Layer, Section 4) 和流层 (Stream Layer, Section 5) 描述了HTTP/2帧的结构方式以及如何形成多路复用流。

  • 帧定义 (Frame Definitions, Section 6) 和错误定义 (Error Definitions, Section 7) 包括HTTP/2中使用的帧和错误类型的详细信息。

  • HTTP映射 (HTTP Mappings, Section 8) 和附加要求 (Additional Requirements, Section 9) 描述了如何使用帧和流表达HTTP语义。

虽然某些帧层和流层概念与HTTP隔离,但本规范并未定义完全通用的帧层。帧层和流层是为HTTP的需求量身定制的。

2.2. Conventions and Terminology (约定和术语)

本文档中的关键词 "MUST"、"MUST NOT"、"REQUIRED"、"SHALL"、"SHALL NOT"、"SHOULD"、"SHOULD NOT"、"RECOMMENDED"、"NOT RECOMMENDED"、"MAY" 和 "OPTIONAL" 应按照BCP 14 [RFC2119] [RFC8174] 中的描述进行解释,当且仅当它们以全大写形式出现时,如此处所示。

所有数值都采用网络字节序 (Network Byte Order)。除非另有说明,否则值为无符号。字面值根据情况以十进制或十六进制提供。十六进制字面值以 "0x" 为前缀,以区别于十进制字面值。

本规范使用RFC 9000 [QUIC] 第1.3节中描述的约定来描述二进制格式。请注意,此格式使用网络字节序,并且高位在低位之前列出。

使用以下术语:

客户端 (Client):发起HTTP/2连接的端点。客户端发送HTTP请求并接收HTTP响应。

连接 (Connection):两个端点之间的传输层连接。

连接错误 (Connection Error):影响整个HTTP/2连接的错误。

端点 (Endpoint):连接的客户端或服务器。

帧 (Frame):HTTP/2连接内的最小通信单元,由一个头部和根据帧类型结构化的可变长度字节序列组成。

对等方 (Peer):一个端点。在讨论特定端点时,"对等方" 指的是讨论主体的远程端点。

接收者 (Receiver):正在接收帧的端点。

发送者 (Sender):正在传输帧的端点。

服务器 (Server):接受HTTP/2连接的端点。服务器接收HTTP请求并发送HTTP响应。

流 (Stream):HTTP/2连接内的双向帧流。

流错误 (Stream Error):单个HTTP/2流上的错误。

最后,术语 "网关 (Gateway)"、"中介 (Intermediary)"、"代理 (Proxy)" 和 "隧道 (Tunnel)" 在 [HTTP] 的第3.7节中定义。中介在不同时间充当客户端和服务器。

术语 "内容 (Content)" 适用于消息体,在 [HTTP] 的第6.4节中定义。