9. Extensions to HTTP/3 (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节)。
实现必须 (MUST) 忽略所有可扩展协议元素中的未知或不支持的值。实现必须 (MUST) 丢弃数据或中止读取具有未知或不支持类型的单向流。这意味着任何这些扩展点都可以被扩展安全地使用,无需事先安排或协商。但是,如果已知的帧类型需要在特定位置,例如SETTINGS帧作为控制流的第一个帧(参见第6.2.1节),则未知的帧类型不满足该要求,并且应该 (SHOULD) 被视为错误。
可能改变现有协议组件语义的扩展必须 (MUST) 在使用之前进行协商。例如,改变HEADERS帧布局的扩展在对等方发出积极信号表示可以接受之前不能使用。协调这种修订布局何时生效可能会很复杂。因此,为现有协议元素的新定义分配新标识符可能更有效。
本文档不强制要求协商扩展使用的特定方法,但它指出可以使用设置(第7.2.4.1节)来实现该目的。如果双方都设置了表示愿意使用扩展的值,则可以使用该扩展。如果使用设置进行扩展协商,则必须 (MUST) 以如下方式定义默认值:如果省略设置,则扩展被禁用。