摘要
Retry-After表示用户代理应等待多久再发出后续请求,并不保证恢复时间。- 该值可以是绝对 HTTP 日期,也可以是秒数,因此时钟和解析过程属于证据链。
503或429只描述已经观察到的响应,不能证明未来容量或所有依赖项的状态。- 运营方需要重试准入收据,把指令、最新健康证据与实际后续结果连接起来。
设想一个恢复控制器收到带有 Retry-After: 120 的 503 Service Unavailable。它暂停所有请求,把两分钟后的节点标成绿色,并安排整条队列在同一秒释放。尚无任何新请求成功,事故却已被标记为恢复。两分钟后,源站依然受限,上游依赖仍不可用,同步重试浪潮反而延长了过载。
标头是有效的,恢复结论却是凭空添加的。
RFC 9110 对 Retry-After 的定义很窄:它表示用户代理在发出后续请求前应等待多久。服务器可在 503 中建议适当的重试时间;在重定向响应中,该字段也可提示用户代理在跟随 Location 地址前应等待多久。这两种用法都没有把指定时刻变成服务健康预测。
标头有两种形式。HTTP 日期指定一个时间点;delay-seconds 指定从收到响应起计算的非负秒数。前者依赖时钟,后者依赖实际接收时间,以及中间件、队列和本地计时器如何处理经过时间。只保存换算后的截止时刻,会丢掉原始指令。
状态码本身也有边界。RFC 9110 将 503 描述为过载或计划维护造成的暂时无法处理。服务器可以建议重试时刻,但规范没有保证限制会在那一刻解除,也没有要求每台过载服务器都必须返回 503。恢复可能更早、更晚、局部发生、因地区或访问上下文而异,也可能被另一依赖阻塞。
RFC 6585 定义了 429 Too Many Requests。响应可以带 Retry-After,但用户识别方式和请求计数方式由服务器决定。令牌、账户、地址、路由、租户或边缘节点可能采用不同限制。脱离该作用域的计时器不能证明下一次请求会被准入。
发出响应的组件同样重要。它可能是源站、网关、反向代理、CDN 或 API 管理器。观察结果只证明该组件在这次交换中发出了这条指令,不能自动证明每一层都共享相同状态。
重试准入收据应保存触发请求与响应、观察点、状态码、原始值、日期或延时形式、接收时间、换算后的最早重试时间、时钟来源及中间件引入的响应年龄,并在不保存秘密的前提下绑定账户、令牌、路由或租户作用域。
随后,收据记录退避算法、随机抖动、重试预算、并发上限、取消状态与实际发送时间。准入前再加入与请求相关的最新健康检查、可用容量、依赖状态、授权上下文与决策组件。最后记录后续响应、表示内容或交易结果。
这样,仪表盘可以区分“已到可再次尝试的时刻”“健康检查通过”“请求获准”和“交易完成”。这些事件可以并列显示,但前一项不能自动生成后一项。
来源
RFC 9110 — HTTP Semantics;RFC 6585 — Additional HTTP Status Codes。
会员简报
档案背景详情
使用相应会员等级登录,即可解锁完整简报与来源注释。
仅限 Strategic Circle
Strategic Circle
所有读者均可浏览。加入并登录后可解锁档案简报。
加入 Strategic Circle仅限 Leadership Alliance
Leadership Alliance
符合条件的 IP 资产所有者和管理层可登录查看 Leadership Alliance 简报。
加入 Leadership Alliance

