RFC9220 通过HTTP/3引导网络套接字



状态: 建议标准
更多信息: 数据追踪| 知识产权| 信息页
组织: 互联网工程工作组(IETF)
RFC编号: 9220
分类: 标准追踪
出版时间: 2022年6月
国际标准期刊编号: 2070-1721
作者: R. Hamilton
Google

前言

本文是关于HTTP/3支持网络套接字的网络规范文档译文,尚未完成翻译,欢迎指正。

摘要

在HTTP/2连接上运行网络套接字(WebSocket)协议的机制同样兼容HTTP/3,但是HTTP版本特性细节需要指定。本文描述该机制是如何适用于HTTP/3的。

备忘状态

本文是互联网标准追踪文档。

本文产自互联网工程任务组(IETF),已接受公开审查,并由互联网互联网工程指导委员会(IESG)批准出版。更多互联网标准相关信息详见RFC 7841第2章。

关于本文当前状态、勘误及反馈方式等相关信息请移步https://www.rfc-editor.org/info/rfc9220

1. 引言

HTTP/2引导网络套接字》定义了一个针对HTTP/2的扩展,其在HTTP/3中也是有用的。该扩展利用了HTTP/2的设置。在将其从HTTP/2移植到HTTP/3中过程中,《HTTP/3》的附录A.3提供了合适的的引导(如果有的话)。

2. 约定与定义

本文中的关键字“必须MUST)”、“必须不MUST NOT)”、“需要REQUIRED)”、“强烈要求SHALL)”、“强烈要求不SHALL NOT)”、“应该SHOULD)”、“不应该SHOULD NOT)”、“推荐RECOMMENDED)”、“不推荐NOT RECOMMENDED)”、“可以MAY)”,以及“可选OPTIONAL)”应理解为BCP 14 《RFC2119》《RFC8174》所描述的,当且仅当它们像本段一样以斜体加粗方式出现的时候。

3. 在HTTP/3上升级使用网络套接字

RFC8441》定义了在HTTP/2连接一条单独流上执行网络套接字协议(WebSocket Protocol)RFC6455的机制。其定义了一个扩展的CONNECT方法,通过给:path:authority伪头部字段(pseudo-header)指定一个新的:protocol伪头部字段值及语义。其同时定义了一个新的通过服务端发送的HTTP/2设置,以告知客户端是否可以使用扩展的CONNECT方法。

伪头部字段及设置与HTTP/2在《RFC8441》中的定义完全一致。《HTTP/3》的附录A.3要求HTTP/3分别注册设置。SETTINGS_ENABLE_CONNECT_PROTOCOL值是0x08(十进制值为8),就像在HTTP/2中那样。

如果服务端圣母支持扩展的CONNECT方法,但是却收到了一个不识别或不支持的:protocol值,服务端应该给请求回复501(未实现)状态码(详见《HTTP第15.6.2章)。服务端可以通过“问题细节(problem details)”回复提供更多信息RFC7807

HTTP/3流的关闭也类似于TCP连接在《RFC6455》中所述的方式关闭。有序的TCP层级关闭通过流的FIN位表示(详见《HTTP/3第4.4章)。RST异常通过H3_REQUEST_CANCELLED(HTTP/3请求取消,详见《HTTP/3第8.1章)类型的流错误(详见《HTTP/3第8章)表示。

4. 安全考量

本文没有在《RFC8441》讨论的基础上引入新的安全问题。

5. IANA考量

本文在“HTTP/3设置”登记(详见《HTTP/3第11.2.2章)中注册了一个新的设置项。

值:

0x08

设置名称:

SETTINGS_ENABLE_CONNECT_PROTOCOL

默认值:

0

状态:

永久

规范:

本文

更改责任人:

IETF

联系方式:

HTTP工作组(Email: ietf-http-wg@w3.org

6. 参考文献

[HTTP] HTTP语法

Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke, Ed., “HTTP Semantics”, STD 97, RFC 9110, DOI 10.17487/RFC9110, June 2022, https://www.rfc-editor.org/info/rfc9110.

[HTTP/2] HTTP/2

Thomson, M., Ed. and C. Benfield, Ed., “HTTP/2”, RFC 9113, DOI 10.17487/RFC9113, June 2022, https://www.rfc-editor.org/info/rfc9113.

[HTTP/3] HTTP/3

Bishop, M., Ed., “HTTP/3”, RFC 9114, DOI 10.17487/RFC9114, June 2022, https://www.rfc-editor.org/info/rfc9114.

[RFC2119] RFC文档中用于指出要求级别的关键字

Bradner, S., “Key words for use in RFCs to Indicate Requirement Levels”, BCP 14, RFC 2119, DOI 10.17487/RFC2119, March 1997, https://www.rfc-editor.org/info/rfc2119.

[RFC6455] 网络套接字协议

Fette, I. and A. Melnikov, “The WebSocket Protocol”, RFC 6455, DOI 10.17487/RFC6455, December 2011, https://www.rfc-editor.org/info/rfc6455.

[RFC7807] HTTP接口问题细节

Nottingham, M. and E. Wilde, “Problem Details for HTTP APIs”, RFC 7807, DOI 10.17487/RFC7807, March 2016, https://www.rfc-editor.org/info/rfc7807.

[RFC8174] RFC2119中关键字大写与小写的歧义

Leiba, B., “Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words”, BCP 14, RFC 8174, DOI 10.17487/RFC8174, May 2017, https://www.rfc-editor.org/info/rfc8174.

[RFC8441] 通过HTTP/2引导网络套接字

McManus, P., “Bootstrapping WebSockets with HTTP/2”, RFC 8441, DOI 10.17487/RFC8441, September 2018, https://www.rfc-editor.org/info/rfc8441.

致谢

本文收到了来自IETF HTTP及QUIC工作组众多贡献者的提交与评审,大量实质性提交来自David Schinazi、Martin Thomson、Lucas Pardue、Mike Bishop、Dragana Damjanovic、Mark Nottingham,以及Julian Reschke。

作者地址

Ryan Hamilton

Google

Email: rch@google.com