RFC 9298 - 通过 HTTP 代理 UDP
互联网工程任务组 (IETF) D. Schinazi 征求意见稿: 9298 Google LLC 类别: 标准轨 2022 年 8 月 ISSN: 2070-1721
通过 HTTP 代理 UDP
摘要
本文档描述了如何在 HTTP 中代理 UDP, 类似于 HTTP CONNECT 方法允许 在 HTTP 中代理 TCP. 更具体地说, 本文档定义了一种协议, 使 HTTP 客户端 能够通过充当代理的 HTTP 服务器为 UDP 通信创建隧道.
本备忘录的状态
本文档是一份互联网标准轨文档.
本文档是互联网工程任务组 (IETF) 的成果. 它代表 IETF 社区的共识, 已经过公开审查, 并获互联网工程指导组 (IESG) 批准发布. 有关互联网标准 的更多信息, 请参见 RFC 7841 第 2 节.
有关本文档当前状态、勘误以及如何提供反馈的信息, 可访问 https://www.rfc-editor.org/info/rfc9298 获取.
版权声明
Copyright (c) 2022 IETF Trust 以及被标明为本文档作者的人员. 保留所有权利.
本文档受发布之日有效的 BCP 78 和 IETF Trust 的《与 IETF 文档有关的 法律条款》(https://trustee.ietf.org/license-info) 约束. 请仔细阅读这些 文档, 因为其中说明了您对本文档享有的权利和受到的限制. 从本文档提取的 代码组件必须包含 Trust 法律条款第 4.e 节所述的修订版 BSD 许可证文本, 并按修订版 BSD 许可证所述不附带任何担保.
目录
-
引言 1.1. 约定与定义
-
客户端配置
-
通过 HTTP 隧道传输 UDP 3.1. UDP 代理处理 3.2. HTTP/1.1 请求 3.3. HTTP/1.1 响应 3.4. HTTP/2 和 HTTP/3 请求 3.5. HTTP/2 和 HTTP/3 响应
-
上下文标识符
-
HTTP 数据报负载格式
-
性能考虑事项 6.1. MTU 考虑事项 6.2. ECN 标记的隧道传输
-
安全考虑事项
-
IANA 考虑事项 8.1. HTTP 升级令牌 8.2. 知名 URI
-
参考文献 9.1. 规范性参考文献 9.2. 资料性参考文献 致谢 作者地址
-
引言
HTTP 提供了 CONNECT 方法 (参见 [HTTP] 第 9.3.6 节), 用于创建通往代理 的 TCP [TCP] 隧道, 但在本规范之前, 尚无对 UDP [UDP] 流量执行相同操作 的方法.
本文档描述了一种通过 HTTP 将 UDP 隧道传输到充当 UDP 专用代理的服务器 的协议. UDP 隧道通常用于创建端到端虚拟连接, 随后可使用 QUIC [QUIC] 或其他运行在 UDP 之上的协议保护该连接. 与 HTTP CONNECT 方法不同, UDP 代理本身由包含流量目标的绝对 URL 标识. 如第 2 节所述, 客户端使用 URI 模板 (URI Template) [TEMPLATE] 生成这些 URL.
本协议通过使用 HTTP 数据报 (HTTP Datagrams) [HTTP-DGRAM], 支持所有 现有 HTTP 版本. 使用 HTTP/2 [HTTP/2] 或 HTTP/3 [HTTP/3] 时, 它采用 [EXT-CONNECT2] 和 [EXT-CONNECT3] 所述的 HTTP 扩展 CONNECT. 使用 HTTP/1.x [HTTP/1.1] 时, 它采用 [HTTP] 第 7.8 节定义的 HTTP Upgrade.
1.1. 约定与定义
本文档中的关键词 "MUST"、"MUST NOT"、"REQUIRED"、"SHALL"、 "SHALL NOT"、"SHOULD"、"SHOULD NOT"、"RECOMMENDED"、 "NOT RECOMMENDED"、"MAY" 和 "OPTIONAL", 仅当像这里一样以全大写 形式出现时, 才应按照 BCP 14 [RFC2119] [RFC8174] 中的描述解释.
本文档使用术语 "UDP 代理" (UDP proxy) 指代这样的 HTTP 服务器: 它响应 客户端的 UDP 隧道请求, 打开通往目标服务器的 UDP 套接字, 并生成对该请求 的响应. 如果客户端与 UDP 代理之间存在 HTTP 中介 (intermediaries, 定义见 [HTTP] 第 3.7 节), 本文档将它们称为 "中介".
请注意, 当所用 HTTP 版本不支持流复用时 (例如 HTTP/1.1), 本文档中对 "流" 的任何引用均表示整个连接.