Skip to main content

2. HTTP/3协议概述

翻译进度

  • API初步翻译
  • RFC 2119关键词校对
  • 技术术语双语标注
  • 代码和ABNF格式检查
  • 最终审核

原文预览:

2.  HTTP/3 Protocol Overview

HTTP/3 provides a transport for HTTP semantics using the QUIC
transport protocol and an internal framing layer similar to HTTP/2.

Once a client knows that an HTTP/3 server exists at a certain
endpoint, it opens a QUIC connection. QUIC provides protocol
negotiation, stream-based multiplexing, and flow control. Discovery
of an HTTP/3 endpoint is described in Section 3.1.

...

HTTP/3使用QUIC传输协议和类似于HTTP/2的内部帧层 (Framing Layer) 为HTTP语义提供传输。

一旦客户端知道某个端点存在HTTP/3服务器,它就会打开一个QUIC连接。QUIC提供协议协商 (Protocol Negotiation)、基于流的多路复用 (Stream-Based Multiplexing) 和流量控制 (Flow Control)。HTTP/3端点的发现在第3.1节中描述。

在每个流中,HTTP/3通信的基本单元是帧 (Frame)(第7.2节)。每种帧类型服务于不同的目的。例如,HEADERS和DATA帧构成HTTP请求和响应的基础(第4.1节)。应用于整个连接的帧在专用控制流 (Control Stream) 上传输。

请求的多路复用使用QUIC流抽象 (Stream Abstraction) 执行,这在 [QUIC-TRANSPORT] 的第2节中描述。每个请求-响应对消耗一个QUIC流。流彼此独立,因此一个被阻塞或遭受数据包丢失的流不会阻止其他流的进展。

服务器推送 (Server Push) 是HTTP/2 ([HTTP/2]) 中引入的一种交互模式,允许服务器在预期客户端发出指定请求时向客户端推送请求-响应交换。这在网络使用与潜在的延迟增益之间进行权衡。多个HTTP/3帧用于管理服务器推送,例如PUSH_PROMISE、MAX_PUSH_ID和CANCEL_PUSH。

与HTTP/2一样,请求和响应字段 (Fields) 在传输时被压缩。由于HPACK ([HPACK]) 依赖于压缩字段段 (Field Sections) 的有序传输(QUIC不提供这种保证),HTTP/3用QPACK ([QPACK]) 替换了HPACK。QPACK使用单独的单向流来修改和跟踪字段表状态 (Field Table State),而编码的字段段引用表的状态而不修改它。

2.1. Document Organization (文档组织)

以下各节提供了HTTP/3连接生命周期的详细概述:

  • "Connection Setup and Management"(连接建立与管理)(第3节)涵盖如何发现HTTP/3端点以及如何建立HTTP/3连接。

  • "Expressing HTTP Semantics in HTTP/3"(在HTTP/3中表达HTTP语义)(第4节)描述如何使用帧来表达HTTP语义。

  • "Connection Closure"(连接关闭)(第5节)描述如何优雅或突然地终止HTTP/3连接。

线协议 (Wire Protocol) 和与传输的交互的详细信息在后续章节中描述:

  • "Stream Mapping and Usage"(流映射与使用)(第6节)描述QUIC流的使用方式。

  • "HTTP Framing Layer"(HTTP帧层)(第7节)描述在大多数流上使用的帧。

  • "Error Handling"(错误处理)(第8节)描述如何处理和表达错误条件,无论是在特定流上还是针对整个连接。

最后几节提供了额外的资源:

  • "Extensions to HTTP/3"(HTTP/3扩展)(第9节)描述如何在未来的文档中添加新功能。

  • 附录A中可以找到HTTP/2和HTTP/3之间更详细的比较。

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

本文档中的关键词 "MUST"(必须)、"MUST NOT"(禁止)、"REQUIRED"(必需)、"SHALL"(应)、"SHALL NOT"(不应)、"SHOULD"(应该)、"SHOULD NOT"(不应该)、"RECOMMENDED"(推荐)、"NOT RECOMMENDED"(不推荐)、"MAY"(可以)和 "OPTIONAL"(可选)应按照BCP 14 [RFC2119] [RFC8174] 中的描述进行解释,当且仅当它们以全部大写形式出现时,如此处所示。

本文档使用 [QUIC-TRANSPORT] 中的可变长度整数编码 (Variable-Length Integer Encoding)。

使用以下术语:

abort(中止): 连接或流的突然终止,可能由于错误条件。

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

connection(连接): 使用QUIC作为传输协议的两个端点之间的传输层连接。

connection error(连接错误): 影响整个HTTP/3连接的错误。

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

frame(帧): HTTP/3中流上通信的最小单元,由头部和根据帧类型结构化的可变长度字节序列组成。

本文档和 [QUIC-TRANSPORT] 中都存在称为"帧"的协议元素。当引用 [QUIC-TRANSPORT] 中的帧时,帧名称将以"QUIC"为前缀。例如,"QUIC CONNECTION_CLOSE frames"。没有此前缀的引用指的是第7.2节中定义的帧。

HTTP/3 connection(HTTP/3连接): 协商的应用协议为HTTP/3的QUIC连接。

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

receiver(接收方): 正在接收帧的端点。

sender(发送方): 正在传输帧的端点。

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

stream(流): 由QUIC传输提供的双向或单向字节流 (Bytestream)。HTTP/3连接中的所有流都可以被视为"HTTP/3流",但在HTTP/3中定义了多种流类型。

stream error(流错误): 单个流上的应用级错误。

术语"content"(内容)在 [HTTP] 的第6.4节中定义。

最后,术语"resource"(资源)、"message"(消息)、"user agent"(用户代理)、"origin server"(源服务器)、"gateway"(网关)、"intermediary"(中介)、"proxy"(代理)和"tunnel"(隧道)在 [HTTP] 的第3节中定义。

本文档中的数据包图 (Packet Diagrams) 使用 [QUIC-TRANSPORT] 第1.3节中定义的格式来说明字段的顺序和大小。