跳到主要内容

4. ALTSVC HTTP/2 帧 (The ALTSVC HTTP/2 Frame)

ALTSVC HTTP/2 帧 ([RFC7540] 第 4 节) 用于向 HTTP/2 客户端宣告替代服务可用.

ALTSVC 帧是 HTTP/2 的非关键扩展. 不支持此帧的端点会忽略它, 这符合 [RFC7540] 第 4.1 节定义的可扩展性规则.

服务器在非 0 流上发送给客户端的 ALTSVC 帧表示, 所传达的替代服务与该流的源 (origin) 相关联.

服务器在流 0 上发送给客户端的 ALTSVC 帧表示, 所传达的替代服务与该帧 Origin 字段中包含的源相关联. 如果某个源未被客户端视为当前连接的权威源, 则与该源的关联 MUST 被忽略.

ALTSVC 帧类型为 0xa (十进制 10).

+-------------------------------+-------------------------------+
| Origin-Len (16) | Origin? (*) ...
+-------------------------------+-------------------------------+
| Alt-Svc-Field-Value (*) ...
+---------------------------------------------------------------+

ALTSVC 帧载荷 (ALTSVC Frame Payload)

ALTSVC 帧包含以下字段:

  • Origin-Len: 一个无符号 16 位整数, 表示 Origin 字段的长度, 单位为八位组.
  • Origin: 一个 OPTIONAL 字符序列, 包含该替代服务适用源的 ASCII 序列化形式 ([RFC6454] 第 6.2 节).
  • Alt-Svc-Field-Value: 一个八位组序列, 其长度由帧长度减去所有前置字段长度得到, 包含与第 3 节定义的 Alt-Svc 字段值相同的值 (ABNF 产生式 "Alt-Svc").

ALTSVC 帧不定义任何标志.

ALTSVC 帧预期由客户端接收. 作为服务器运行的设备 MUST 忽略该帧.

流 0 上 "Origin" 信息为空 (长度为 0) 的 ALTSVC 帧无效, 且 MUST 被忽略. 非 0 流上包含非空 "Origin" 信息的 ALTSVC 帧无效, 且 MUST 被忽略.

ALTSVC 帧按逐跳 (hop-by-hop) 方式处理. 中间方 (intermediary) MUST NOT 转发 ALTSVC 帧, 但可以使用 ALTSVC 帧中包含的信息, 构造新的 ALTSVC 帧并发送给自己的客户端.

接收 ALTSVC 帧在语义上等价于接收 Alt-Svc 头字段. 因此, ALTSVC 帧会导致对应源的替代服务被替换. 注意, 混合使用 Alt-Svc 头字段和 ALTSVC 帧并不明智, 因为接收顺序可能难以预测.