429 表示什么
服务器判定同一客户端发送的请求过多并启用限速时,会返回 429 响应。服务器可能按 IP 地址、API 密钥、账号、Cookie 或端点统计请求。
返回该响应的通常是目标网站或 API,也可能是前置 CDN 或防火墙。如果只在使用代理时出现该错误,则可能是代理自身设置了连接数或账号配额限制。
HTTP/1.1 429 Too Many Requests
Retry-After: 60
Retry-After 表示客户端何时可以重试。其值可以是秒数,也可以是 HTTP 日期,但服务器不一定会返回该标头。其他配额和重置标头则因具体实现而异。
常见原因
- 短时流量突增。 即使每天的请求总量不高,也可能有大量请求集中在很短时间内到达。
- API 配额耗尽。 API 密钥或账号已用完每分钟、每日或计费套餐规定的额度。
- 并发过高。 多个工作进程同时发送请求,超出端点的并行请求上限。
- 共用源地址。 多个用户共用 NAT、VPN 或共享代理,发出的请求会累计到同一个基于 IP 的限额中。
- 重试过于频繁。 请求失败后立即重试,导致出现更多 429 响应。
如何解决
- 暂停发送新请求。 继续保持相同的请求速率,可能会延长限速期。
- 遵守
Retry-After。 如果响应中没有该标头,应等待一段时间再测试,不要持续轮询。 - 限制速率和并发。 使用队列或令牌桶,让工作进程的请求量保持在规定额度以内。
- 采用带抖动的退避策略。 每次收到 429 后延长等待时间,并增加少量随机延迟。GET 等安全请求可自动重试;POST 请求则应使用 API 支持的幂等性机制加以保护。
- 减少请求量。 缓存结果、删除重复请求,或在 API 支持时批量调用。如需更高额度,应申请授权访问,不要更换身份。
类似的 HTTP 错误
| 状态码 | 含义 | 后续处理 |
|---|---|---|
| 429 Too Many Requests | 客户端超出速率或配额 | 等待并减少请求量 |
| 403 Forbidden | 服务器已理解请求,但拒绝处理 | 解决访问权限或策略问题 |
| 407 Proxy Authentication Required | 代理拒绝了认证信息 | 修正代理用户名和密码 |
常见问题
429 错误会持续多久?
具体时长取决于限制规则。请遵守 Retry-After 或文档中规定的重置时间。如果两者都没有,应等待一段时间,再以较低速率恢复请求。
轮换代理能解决 429 错误吗?
不一定。IP 轮换会更改源 IP,但无法解决与 API 密钥、账号、Cookie 或全局配额关联的限制。不要使用轮换来规避网站明确规定的限制。
429 是否表示我的 IP 已被永久封禁?
不是。429 通常表示临时限速,而不是 IP 封禁。如果超过预计重置时间后请求仍然失败,请检查最新的状态码和响应标头。