4. 上下文标识符 (Context Identifiers)
本文档定义的在 HTTP 中代理 UDP 的机制, 允许未来扩展交换承载与 UDP 负载不同语义的 HTTP Datagram. 其中一些扩展可以用附加数据增强 UDP 负载, 另一些扩展则可以交换与 UDP 负载完全分离的数据. 为实现这一点, 所有与 UDP 代理请求流关联的 HTTP Datagram 都以 Context ID 字段开头; 见 Section 5.
Context ID 是 62 位整数 (0 到 2^62-1). Context ID 被编码为可变长度整数; 见 [QUIC] Section 16. Context ID 值 0 保留给 UDP 负载使用, 非零值则动态分配. 非零偶数 Context ID 由客户端分配, 奇数 Context ID 由代理分配. Context ID 命名空间绑定到给定 HTTP 请求; 同一数值的 Context ID 可以在不同请求中同时分配, 且可能具有不同语义. 在给定 HTTP 命名空间内, Context ID 禁止 (MUST NOT) 被重新分配, 但可以 (MAY) 按任意顺序分配. 对偶数和奇数 Context ID 使用方式的分配限制, 是为了避免端点之间需要同步. 但是, 一旦某个 Context ID 已被分配, 这些限制就不再适用于该 Context ID 的使用; 它可以由任何客户端或 UDP 代理使用, 与最初由哪个端点分配无关.
注册 (registration) 是指端点告知其对等方某个 Context ID 的语义和格式的动作. 本文档不定义注册如何发生. 未来扩展可以 (MAY) 使用 HTTP 头字段或 capsule 来注册 Context ID. 根据所使用的方法, 接收方可能会收到带有尚未注册的 Context ID 的数据报. 例如, 这可能是因为传输期间, 包含数据报的分组和包含注册消息的分组发生了重排序.