1. 简介 (Introduction)
HTTP 语义 ([HTTP]) 在互联网上被广泛用于各种服务。这些语义最常与 HTTP/1.1 和 HTTP/2 一起使用。HTTP/1.1 已在各种传输层和会话层上使用, 而 HTTP/2 主要与基于 TCP 的 TLS 一起使用。HTTP/3 在新的传输协议 QUIC 上支持相同的语义。
1.1. HTTP 的早期版本 (Prior Versions of HTTP)
HTTP/1.1 ([HTTP/1.1]) 使用空格分隔的文本字段来传输 HTTP 消息。虽然这些交换是人类可读的, 但使用空格进行消息格式化会导致解析复杂性和对变体行为的过度容忍。
由于 HTTP/1.1 不包含多路复用层, 通常使用多个 TCP 连接来并行处理请求。然而, 这对拥塞控制和网络效率有负面影响, 因为 TCP 不会在多个连接之间共享拥塞控制。
HTTP/2 ([HTTP/2]) 引入了二进制帧和多路复用层, 以在不修改传输层的情况下改善延迟。然而, 由于 HTTP/2 多路复用的并行特性对 TCP 的丢失恢复机制不可见, 丢失或重新排序的数据包会导致所有活动事务停滞, 无论该事务是否直接受到丢失数据包的影响。
1.2. 委托给 QUIC (Delegation to QUIC)
QUIC 传输协议结合了流多路复用和每流流量控制, 类似于 HTTP/2 帧层提供的功能。通过在流级别提供可靠性和在整个连接上进行拥塞控制, QUIC 能够相比 TCP 映射改善 HTTP 的性能。QUIC 还在传输层集成了 TLS 1.3 ([TLS]), 提供与在 TCP 上运行 TLS 相当的机密性和完整性, 同时具有 TCP Fast Open ([TFO]) 改进的连接建立延迟。
本文档定义了 HTTP/3: 一种在 QUIC 传输协议上映射 HTTP 语义的方式, 在很大程度上借鉴了 HTTP/2 的设计。HTTP/3 依赖 QUIC 提供数据的机密性和完整性保护、对等身份验证以及可靠的按序每流传输。在将流生命周期和流量控制问题委托给 QUIC 的同时, 在每个流上使用类似于 HTTP/2 帧的二进制帧。一些 HTTP/2 功能被 QUIC 包含, 而其他功能则在 QUIC 之上实现。
QUIC 在 [QUIC-TRANSPORT] 中描述。有关 HTTP/2 的完整描述, 请参见 [HTTP/2]。