摘要

  • Alt-Svc 允许源站通告另一种协议、主机和端口,同时保持原始 URI 与源站身份不变。
  • 一条仍在有效期内的通告不能证明某个客户端已到达替代端点、为原源站完成认证、协商出预期协议,或通过该路径完成请求。
  • 客户端是否选择替代服务是可选决策;网络环境会改变结果,替代连接失败后的回退也必须被观察。
  • 替代路径收据应在同一观察点关联通告年龄、源站身份、认证、ALPN 结果、客户端选择、请求结果与回退。

设想某服务返回 Alt-Svc: h3=":443"; ma=86400。部署仪表盘在源站看见该响应头,便把整个服务标记为已经迁移到 HTTP/3。但某个接入网络无法建立替代连接,客户端悄然继续使用原有源站连接,请求仍成功,总体可用性依旧是绿色。通告是真实的,可这组客户端并未发生所宣称的路径迁移。

这是一个假设性的运行轨迹,并非关于某家服务商的事故陈述。协议机制工作正常,测量错误在于把路径资格当成路径执行。

替代路由仍保留源站身份

RFC 7838 定义了 HTTP 替代服务,使某源站的资源可以在另一个网络位置以权威方式提供,也可以使用不同的协议配置。替代服务由应用协议、主机和端口共同标识。它是指向同一源站的路由信息,不是改变资源 URI 的重定向。

安全上下文也随原身份保留。HTTP 访问机制上层的软件仍看到原始 scheme、主机和端口。若连接使用 TLS 认证,替代服务必须提供对原源站主机名有效的证书,而不是只对替代主机名有效。

通告本身没有证明认证已经发生。它只表明源站提名了一条候选路径。安全使用的证据始于客户端实际建立的连接和实际验证的身份。

资格、协商与使用是不同事件

替代服务对客户端是可选的。客户端可以按自身标准在仍有效的候选中选择,也能在建立替代连接时继续使用已有连接。因此,服务器给出的优先次序并不是客户端选择记录。

RFC 7301 定义了 TLS 内的应用层协议协商。RFC 7838 要求:如果替代连接未能协商出预期协议,就必须将该替代服务视为失败。端口可达或 TLS 握手完成都不充分,关键是通告的应用协议是否真正被选择。

对于 HTTP/3,RFC 9114 在 QUIC 上映射 HTTP 语义并使用 h3 ALPN 标识。Alt-Svc 中出现 h3,并不等同于已经建立 QUIC、协商 HTTP/3 并完成一次请求。每个转换都需要独立计量。

客户端使用替代服务时,Alt-Used 可以向服务器表明这一事实。但源站、CDN、客户端和合成探针看到的是决策链的不同切面,可信的结论必须说明观察位置。

新鲜度不等于健康度

Alt-Svc 信息有自己的有效期。ma 决定它可用于建立新连接的时间,与普通 HTTP 响应缓存期不同。新的 Alt-Svc 值会替换该源站已缓存的候选,clear 则使其失效。

有效期只说明通告依据缓存规则仍可参与选择,并不保证端点此刻可达、每个客户端网络都有路由、QUIC 能穿过每一道策略边界,或替代服务仍具备预期容量和时延。这些都是当前路径属性。

检测到网络配置改变时,客户端通常清除没有 persist=1 的候选。即使带有持久标记,它也只是提示改变网络后仍可能有用,不能认证新网络的可达性或策略。

回退可以维持服务,也会掩盖失败

RFC 7838 允许客户端在替代服务失败或无响应时回到源站或另一候选。这有助于可用性,却会让迁移测量显得异常平静。如果没有实际路径标识,一次成功请求并不能证明它走了预定替代路径。

回退还可能丢失更强的安全属性,形成降级面。证据应记录哪条候选失败、失败方式、替代它的路径、该回退是否获准,以及安全或性能属性发生了什么变化。

因此,可用性、替代路径采用率与回退安全性是三项不同指标,不能用一条绿色成功率替代。

用替代路径收据关闭变更

观察到通告时就打开收据,记录源站、完整 Alt-Svc 值、响应来源、接收时间、计算年龄、ma、persist、网络环境与客户端群组。还要保留通告是源站直接返回还是来自缓存,以及后续值是否替换或清除了它。

对每次替代尝试,记录实际连接的主机和端口、原源站名称认证结果、提供与协商的 ALPN、连接结果、客户端选择理由、请求状态、时延、可用时的 Alt-Used 观察,以及回退路径。失败与绕过记录解释了为什么一条新鲜通告没有转化为流量。

只有当这些关联证据覆盖特定群组和时间段时,才能关闭相应的迁移声明。通告证明提名,认证证明连接对原源站的权威性,ALPN 证明协议选择,请求证据证明使用和结果。所有事件在具名观察点结合起来,才算证明一条路径。

来源