503 表示什么
网站、负载均衡器、CDN 或反向代理都可能返回 503。配置的正向代理自身服务不可用时,也可能返回此状态码。与连接失败不同,503 是请求路径中某个服务返回的完整 HTTP 响应。
HTTP/1.1 503 Service Unavailable
Retry-After: 120
Retry-After: 120 表示客户端应等待 120 秒后再试。该响应头也可以包含日期,但不一定会出现,也不能保证下次请求成功。
常见原因
- 流量过载。 当前活跃请求超出服务器或连接池的处理能力。
- 计划维护。 运营方暂时下线了应用或某个 API 端点。
- 没有健康的上游服务器。 网关仍在运行,但后端应用服务器不可用。
- 保护性限速。 流量超出系统容量或配置的限制时,部分系统会返回 503,而不是 429。
- 代理服务异常。 配置的代理可能已经过载,或无法连接上游网络。
如何解决 503 错误
- 检查响应头。 查看
Retry-After、Server、Via和 CDN 专用响应头,确认响应由谁发出。 - 等待一段时间再试。 按照
Retry-After指定的时间等待。如果没有此响应头,请使用带随机抖动和重试次数限制的指数退避策略。 - 降低请求压力。 减少并发和每秒请求数。立即反复重试可能会延长过载服务的不可用状态。
- 测试请求路径。 在允许的情况下,对比直接请求和经代理发送的请求。这有助于判断响应来自网站还是代理。
- 只重试安全操作。 重复发送
GET通常是安全的。除非 API 支持幂等性,否则自动重试POST可能产生重复订单、消息或其他操作。
503、502、504 与 429 的区别
| 状态码 | 发送方 | 含义 |
|---|---|---|
| 503 Service Unavailable | 服务器或中间服务 | 服务当前无法处理请求 |
| 502 Bad Gateway | 网关 | 上游返回了无效响应 |
| 504 Gateway Timeout | 网关 | 上游响应耗时过长 |
| 429 Too Many Requests | 网站或中间服务 | 此客户端发送的请求过多 |
常见问题
503 错误是临时的吗?
通常是。HTTP 将 503 定义为暂时不可用,但响应方可能不会提供恢复时间。如果持续收到 503 响应,可能是服务故障或服务器配置错误。
503 是代理导致的吗?
有可能。检查响应头,并通过另一条允许使用的路径发送相同请求进行对比。如果只有经代理发送的请求失败,可能是代理不可用,也可能是代理到网站的路径不可用。
遇到 503 后应该等待多久再试?
如果响应中有 Retry-After,请按其指定的时间等待。否则,先短暂等待,每次失败后逐步延长等待时间,并在重试次数达到设定上限后停止。