跳到主要内容

2. ORIGIN HTTP/3 帧 (ORIGIN HTTP/3 Frame)

2. ORIGIN HTTP/3 帧 (ORIGIN HTTP/3 Frame)

ORIGIN HTTP/3 帧允许服务器指示一个或多个源 (origin) [RFC6454], 服务器希望客户端将这些源视为该帧所在连接的源集合 (Origin Set, [ORIGIN] 第 2.3 节) 成员.

该帧载荷的语义与 [ORIGIN] 中定义的 HTTP/2 帧相同. HTTP/2 保留流 0 用于与连接状态相关的帧, 而 HTTP/3 为此定义了一对称为 "控制流 (control streams)" 的单向流.

当 [ORIGIN] 指出 ORIGIN 帧在流 0 上发送时, 在 HTTP/3 中应解释为控制流: 也就是说, ORIGIN 帧由服务器通过服务器的控制流发送给客户端.

HTTP/3 的通用帧布局没有定义 Flags 字段. 由于 ORIGIN 帧没有定义任何标志, 本规范也不定义在 HTTP/3 中传递此类标志的机制.

2.1 帧布局 (Frame Layout)

ORIGIN 帧的布局与 HTTP/2 中使用的布局几乎相同; 为清晰起见, 此处重新说明相关信息. 与 HTTP/2 一样, ORIGIN 帧类型为 0x0c (十进制 12). 载荷包含零个或多个 Origin-Entry 字段实例.

HTTP/3 Origin-Entry {
Origin-Len (16),
ASCII-Origin (..),
}

HTTP/3 ORIGIN Frame {
Type (i) = 0x0c,
Length (i),
Origin-Entry (..) ...,
}

图 1: ORIGIN 帧布局

Origin-Entry 是一个带长度界定的字符串. 具体来说, 它包含两个字段:

Origin-Len: 一个无符号 16 位整数, 表示 ASCII-Origin 字段的长度, 单位为八位组.

ASCII-Origin: 一个可选 (OPTIONAL) 字符序列, 包含某个源 ([RFC6454] 第 6.2 节) 的 ASCII 序列化表示, 发送方声明此连接对该源具有或可能具有权威性.