2022-07-24 19:00:22
一、简介
HTTP 语义 ( [ HTTP ] ) 用于 Internet 上的广泛服务。这些语义最常用于 HTTP/1.1 和 HTTP/2。HTTP/1.1 已用于各种传输层和会话层,而 HTTP/2 主要用于 TCP 上的 TLS。HTTP/3 通过新的传输协议支持相同的语义:QUIC。
1.1。HTTP 的早期版本
HTTP/1.1 ( [ HTTP/1.1 ] ) 使用空格分隔的文本字段来传达 HTTP 消息。虽然这些交换是人类可读的,但使用空格进行消息格式化会导致解析复杂性和对变体行为的过度容忍。
由于 HTTP/1.1 不包含多路复用层,因此通常使用多个 TCP 连接来并行处理请求。然而,这对拥塞控制和网络效率有负面影响,因为 TCP 不跨多个连接共享拥塞控制。
HTTP/2 ( [ HTTP/2 ] ) 引入了二进制帧和多路复用层,以在不修改传输层的情况下改善延迟。但是,由于 HTTP/2 多路复用的并行特性对 TCP 的丢失恢复机制不可见,因此丢失或重新排序的数据包会导致所有活动事务都经历停顿,无论该事务是否直接受到丢失数据包的影响。
1.2. 委托给 QUIC
QUIC 传输协议结合了流多路复用和每个流的流控制,类似于 HTTP/2 成帧层提供的。通过提供流级别的可靠性和整个连接的拥塞控制,与 TCP 映射相比,QUIC 能够提高 HTTP 的性能。QUIC 还在传输层合并了 TLS 1.3 ( [ TLS ] ),提供与通过 TCP 运行 TLS 相当的机密性和完整性,并改进了 TCP Fast Open ( [ TFO ] ) 的连接设置延迟。
本文档定义了 HTTP/3:HTTP 语义在 QUIC 传输协议上的映射,大量借鉴了 HTTP/2 的设计。HTTP/3 依赖于 QUIC 来提供数据的机密性和完整性保护;对等认证;可靠、有序、按流交付。在将流生命周期和流控制问题委托给 QUIC 时,每个流都使用类似于 HTTP/2 框架的二进制框架。QUIC 包含一些 HTTP/2 功能,而其他功能则在 QUIC 之上实现。
QUIC 在[ QUIC-TRANSPORT ]中有描述。有关 HTTP/2 的完整描述,请参阅[ HTTP/2 ]。
2. HTTP/3 协议概述
HTTP/3 使用 QUIC 传输协议和类似于 HTTP/2 的内部框架层为 HTTP 语义提供传输。
一旦客户端知道某个端点存在 HTTP/3 服务器,它就会打开一个 QUIC 连接。QUIC 提供协议协商、基于流的多路复用和流控制。第 3.1 节描述了 HTTP/3 端点的发现 。
在每个流中,HTTP/3 通信的基本单位是一个帧(第 7.2 节)。每种帧类型都有不同的用途。例如,标题 和数据帧构成了 HTTP 请求和响应的基础(第 4.1 节)。适用于整个连接的帧在专用控制流上传送.
使用 QUIC 流抽象来执行请求的多路复用,这在[ QUIC-TRANSPORT ]的第 2 节中进行了描述。每个请求-响应对使用一个 QUIC 流。流相互独立,因此一个流被阻塞或丢包不会阻止其他流的进展。
服务器推送是 HTTP/2 ( [ HTTP/2 ] ) 中引入的一种交互模式,它允许服务器在预期客户端发出指示的请求时向客户端推送请求-响应交换。这权衡了网络使用与潜在的延迟增益。几个 HTTP/3 帧用于管理服务器推送,例如PUSH_PROMISE, MAX_PUSH_ID, 和CANCEL_PUSH.
与 HTTP/2 一样,请求和响应字段被压缩以进行传输。因为 HPACK ( [ HPACK ] ) 依赖于压缩字段部分的按顺序传输(QUIC 不提供保证),所以 HTTP/3 用 QPACK ( [ QPACK ] ) 替换了 HPACK。QPACK 使用单独的单向流来修改和跟踪字段表状态,而编码字段部分引用表的状态而不修改它。
283 views16:00