7. PRIORITY_UPDATE 帧 (The PRIORITY_UPDATE Frame)
PRIORITY_UPDATE frame 用于在请求已发送后重新确定响应优先级. 该 frame 类型特定于 HTTP 版本, Sections 7.1 和 7.2 分别为 HTTP/2 和 HTTP/3 定义了该类型.
PRIORITY_UPDATE frame 使用与 Priority HTTP header field (Section 5) 相同的格式携带优先级参数. 这些参数会覆盖先前为该请求发送的任何参数, 无论这些参数是通过 Priority header field 发送, 还是通过另一个 PRIORITY_UPDATE frame 发送.
中介 MUST NOT 将 PRIORITY_UPDATE frames 转发到下一跳. 中介 MAY 使用收到的 PRIORITY_UPDATE frame 中的信息来改变已转发请求或响应的优先级, 也 MAY 选择忽略该 frame.
服务器 MAY 发送 PRIORITY_UPDATE frames, 以建议中介应如何确定其响应的优先级. 服务器 SHOULD 向已知能理解这些 frame 的中介发送 PRIORITY_UPDATE frames.
7.1. HTTP/2 PRIORITY_UPDATE Frame
HTTP/2 PRIORITY_UPDATE frame (type=0x10) 在 HTTP/2 连接上传达优先级参数. 该 frame 的格式和语义在 [HTTP/2] 中定义.
PRIORITY_UPDATE frame 标识需要重新确定优先级的 request stream, 并携带要应用的优先级参数, 这些参数编码为 Dictionary.
HTTP/2 PRIORITY_UPDATE frame 的 payload 包含以下字段:
-
Prioritized Stream ID: 需要重新确定优先级的 request stream 的 31-bit stream identifier (见 [HTTP/2] 的 Section 5.1.1).
-
Priority Field Value: 包含优先级参数的 Dictionary, 编码为 ASCII 字符序列.
客户端 MAY 为处于任何状态的 stream 发送 PRIORITY_UPDATE frame, 但应当在该 stream 转换为 "closed" 状态之前发送 (见 [HTTP/2] 的 Section 5.1).
服务器 MAY 在任何状态下发送 PRIORITY_UPDATE frame.
7.2. HTTP/3 PRIORITY_UPDATE Frame
HTTP/3 PRIORITY_UPDATE frame (type=0xF0700 或 0xF0701) 在 HTTP/3 连接上传达优先级参数.
Frame type 0xF0700 用于 request streams, 0xF0701 用于 push streams.
HTTP/3 PRIORITY_UPDATE frame 的 payload 包含:
-
Prioritized Element ID: 使用可变长度整数编码进行编码的 stream ID 或 push ID.
-
Priority Field Value: 包含优先级参数的 Dictionary.
客户端 MAY 随时为 request stream 发送 PRIORITY_UPDATE frame.
服务器 MAY 随时发送 PRIORITY_UPDATE frame, 以指示应如何确定其响应的优先级.