摘要

  • ORIGIN 帧允许 HTTP/2 服务端说明兼容客户端可把哪些源站与当前连接关联。
  • 源站进入 Origin Set 仍不够;连接必须通过针对该源站的证书校验,帧本身不能赋予它代表源站的资格。
  • 帧的效力属于具体连接并逐跳处理;错误条目、代理转来的帧以及出现在错误流或协议上的帧都应被忽略。
  • 合格的连接复用证明应关联有效帧、精确源站、证书判断、客户端选择、请求结果和任何 421 移除事件。

设想共享边缘节点发送一帧 ORIGIN,其中列出第二个 HTTPS 服务。部署仪表盘在抓包中看到该名称,便取消该服务的独立连接测试。然而共享连接的证书并不包含第二个服务名。该客户端因此拒绝复用并另开连接。在一项独立的陈旧状态测试中,另一客户端实例仍通过旧连接发送请求,收到 421 Misdirected Request。帧确实存在,但该连接代表第二个源站的条件并未成立。

这是虚构的运行轨迹,并非具名事故。错误在于把服务端声明、客户端权限判断和请求结果合并成一个绿色指标。

帧改变的是连接级集合

RFC 8336 把 ORIGIN 定义为初始化或修改兼容客户端 Origin Set 的 HTTP/2 扩展。每个条目都是一个精确源站的 ASCII 序列化值,不是通配符、重定向或新的资源身份。

该帧必须位于流 0,并用于 h2 或明确采用它的协议;在 h2c 上应忽略。它是非关键扩展,不支持的端点可以忽略。它还必须逐跳处理:中间设备不得转发,配置为使用代理的客户端应忽略来自代理的 ORIGIN 帧。没有连接、协议、流和发送者上下文的抓包,不能证明客户端处理了它。

无法解析的条目会被忽略。ORIGIN 不支持通配名称,每个预期源站都要明确列出。因此通配证书的覆盖范围与 Origin Set 是两套规则不同的清单。

进入集合不等于有权代表源站

集合初始化后会限制连接合并:兼容客户端不得认为该连接有权代表列表外的源站。但列在其中也不是充分条件。RFC 8336 仍要求服务端提交通过适当检查的证书,包括源站主机名与证书 subjectAltName 的匹配。

RFC 9110 同样把 HTTPS 权限绑定到成功建立的安全连接和客户端信任的源站证书。ORIGIN 条目不能铸造信任、扩展证书名称或豁免客户端策略。

这也不同于 R064:Alt-Svc 推荐另一服务路径,ORIGIN 描述一条连接所关联的源站。RFC 8336 明确指出,替代服务通告不会改变 Origin Set,也不会决定服务端权限。

连接期间的权限仍会变化

后续有效帧可以增加条目。421 Misdirected Request 会让兼容客户端从集合中移除对应请求的源站。因此较早的服务端声明不是连接全生命周期的永久授权。

客户端有时可以不查询 DNS,但 RFC 8336 指出这会增加风险,并要求用其他方式对证书合法性建立高度信心。这是策略选择,不是所有客户端行为一致的证明。

用连接授权证据记录关闭变更:记录连接身份、协商协议、流、帧字节、发送者、解析结果和有序 Origin Set;对每个源站关联证书链、信任结果、精确 SAN 匹配、DNS 结果或其他能够确认证书合法性的证据、复用决策、请求结果以及 421 移除。结论只覆盖已观察的客户端群体和时间窗口。

来源