2. 客户端配置
- 客户端配置
HTTP 客户端使用 URI Template [TEMPLATE] 配置 UDP 代理, 该模板包含变量 "target_host" 和 "target_port". 示例如下:
https://example.org/.well-known/masque/udp/\{target_host\}/\{target_port\}/ https://proxy.example.org:4443/masque?h=\{target_host\}&p=\{target_port\} https://proxy.example.org:4443/masque{?target_host,target_port}
图 1: URI 模板示例
以下要求适用于 URI Template:
-
URI Template 必须 (MUST) 是 level 3 或更低级别的模板.
-
URI Template 必须 (MUST) 采用绝对形式, 并且必须 (MUST) 包含非空的 scheme、authority 和 path 组件.
-
URI Template 的 path 组件必须 (MUST) 以斜杠 ("/") 开头.
-
所有模板变量都必须 (MUST) 位于 URI 的 path 或 query 组件中.
-
URI Template 必须 (MUST) 包含 "target_host" 和 "target_port" 两个变量, 也可以 (MAY) 包含其他变量.
-
URI Template 禁止 (MUST NOT) 包含任何非 ASCII Unicode 字符, 并且必须 (MUST) 只包含 0x21-0x7E 范围内的 ASCII 字符 (允许百分号编码; 参见 [URI] 第 2.1 节).
-
URI Template 禁止 (MUST NOT) 使用 Reserved Expansion ("+" operator)、Fragment Expansion ("#" operator)、带点前缀的 Label Expansion、带斜杠前缀的 Path Segment Expansion, 以及带分号前缀的 Path-Style Parameter Expansion.
客户端应当 (SHOULD) 验证上述要求; 但是, 客户端可以 (MAY) 使用缺少这些特定验证能力的通用 URI Template 实现. 如果客户端检测到某个 URI Template 不满足上述任一要求, 客户端必须 (MUST) 拒绝该配置, 并在不向 UDP 代理发送请求的情况下中止请求.
原始 HTTP CONNECT 方法允许传递目标主机和端口, 但不允许传递 scheme、代理 authority、path 或 query. 因此, 有些客户端代理配置界面只能让用户配置代理主机和代理端口. 如果本规范的客户端实现受到这种限制, 可以 (MAY) 尝试使用默认模板访问 UDP 代理能力. 默认模板定义为 "https://$PROXY_HOST:$PROXY_PORT/.well-known/masque/udp/{target_host}/{target_port}/", 其中 $PROXY_HOST 和 $PROXY_PORT 分别是已配置的 UDP 代理主机和端口. 如果 UDP 代理部署需要与这类客户端互操作, 应当 (SHOULD) 在该位置提供服务.