Skip to main content

9. HTTP/3 的扩展 (Extensions to HTTP/3)

HTTP/3 允许扩展协议。在本节描述的限制内, 协议扩展可用于提供额外的服务或改变协议的任何方面。扩展仅在单个 HTTP/3 连接的范围内有效。

这适用于本文档中定义的协议元素。这不影响扩展 HTTP 的现有选项, 例如定义新方法、状态码或字段。

扩展允许使用新的帧类型 (第 7.2 节)、新的设置 (第 7.2.4.1 节)、新的错误码 (第 8 节) 或新的单向流类型 (第 6.2 节)。建立了注册表来管理这些扩展点: 帧类型 (第 11.2.1 节)、设置 (第 11.2.2 节)、错误码 (第 11.2.3 节) 和流类型 (第 11.2.4 节)。

实现必须忽略所有可扩展协议元素中的未知或不支持的值。实现必须丢弃数据或中止读取具有未知或不支持类型的单向流。这意味着任何这些扩展点都可以在没有事先安排或协商的情况下被扩展安全使用。但是, 当已知帧类型需要位于特定位置时, 例如 SETTINGS 帧作为控制流的第一帧 (参见第 6.2.1 节), 未知帧类型不满足该要求, 并且应当被视为错误。

可能改变现有协议组件语义的扩展必须在使用之前进行协商。例如, 改变 HEADERS 帧布局的扩展在对等方发出可接受的肯定信号之前不能使用。协调何时生效这样修改的布局可能会很复杂。因此, 为现有协议元素的新定义分配新标识符可能更有效。

本文档没有规定协商扩展使用的特定方法, 但它指出可以使用设置 (第 7.2.4.1 节) 来实现该目的。如果两个对等方都设置了表示愿意使用扩展的值, 则可以使用该扩展。如果将设置用于扩展协商, 则必须以这样的方式定义默认值: 如果省略设置, 则禁用扩展。