ENGINEERING PLAYBOOK
HTTP 429 限流与 Retry-After
429 表示请求频率触发了服务端限制。客户端应先读取 Retry-After,再使用带抖动的退避和请求幂等性判断;服务端则要明确限流维度、窗口和响应头。
适用人群:需要实现限流退避并避免重试风暴的客户端与 API 工程师
排查路径
- 确认限流按账号、IP、令牌还是资源维度执行。
- 解析 Retry-After 的秒数或 HTTP 日期格式。
- 为可重试请求配置上限、退避与随机抖动。
- 记录触发率、恢复时间和被限制操作。
执行步骤
- 保存 429 响应头并核对服务器时钟。
- 只重试幂等或明确支持幂等键的请求。
- 限制并发,避免多个工作线程同时恢复。
- 为重试设置次数和总耗时上限。
- 服务端发布清晰的限流指标与告警。
可复制命令与示例
查看 Retry-After
curl -sS -D - -o /dev/null https://example.test/api带上限的退避伪代码
delay = min(cap, base * (2 ** attempt)) + random.uniform(0, jitter)
time.sleep(delay)可复现任务记录
具体错误或任务
服务返回 429 后客户端立即并发重试,放大限流并延长恢复时间。
失败信号:HTTP 429、Retry-After 存在或缺失,单位时间请求数在重试后继续上升。
最小输入
一个可重复请求、状态行、响应头、客户端重试次数与并发上限。
验证命令或步骤
curl --silent --show-error --dump-header - --output /dev/null 'https://api.example.test/rate-limited'预期输出
成功样本为 2xx;限流样本明确显示 429,并保留 Retry-After 供客户端解析。
失败输出
客户端忽略 Retry-After、无上限重试,或多个实例在同一时刻同步重试。
成功判据
重试次数有上限并加入抖动,按服务提示等待后恢复,且总体请求率下降而非放大。
本任务常见错误
- 把所有 4xx 都自动重试
- 忽略 Retry-After 的日期与秒数形式
- 缺少全局并发和重试预算
资料与适用边界
429 与 Retry-After 语义依据 RFC 6585 和 RFC 9110;具体配额与窗口以服务端当前文档为准。
证据块复核日期:2026-09-04
相关站内页面
资料依据与复核边界
资料复核日期:2026-08-29