在前述的博文中,我们已经对HTTP状态码502/503/504有了一个系统性的综合认知。
经过比较分析,有的读者提出了这样一个疑问:似乎502/503/504的异常原因都暗含服务器过载,那么不同的错误码究竟有何区别呢?
502 Bad Gateway
触发条件
网关或代理服务器无法从上游服务器(如应用服务器、数据库)获取有效响应,且上游服务器可能因资源过载崩溃或无法处理请求。
资源过载表现
- 上游服务器因CPU、内存耗尽或请求队列满导致崩溃,无法返回任何响应。
- 网关因上游服务器过载而无法建立连接(如连接超时或拒绝连接)。
典型场景
反向代理后的应用服务器因高并发宕机,网关返回502。
503 Service Unavailable
触发条件
服务器明确因临时过载或维护无法处理当前请求,且客户端可通过重试机制恢复。
资源过载表现
- 服务器主动检测到自身资源(如线程池、数据库连接池)耗尽,直接拒绝新请求。
- 通常伴随Retry-After响应头,提示客户端延迟重试时间。
典型场景
电商大促期间,服务器因瞬时流量超出承载能力返回503,并建议用户30秒后重试。
504 Gateway Timeout
触发条件
网关或代理服务器在等待上游服务器响应时超时,但上游服务器可能仍在处理请求(未完全崩溃)。
资源过载表现
- 上游服务器因处理耗时过长(如复杂查询或高负载任务)未能在网关设定的超时时间内返回结果。
- 网络延迟或上游服务器资源竞争导致响应延迟。
典型场景
微服务架构中,某个服务因数据库锁竞争导致响应超时,网关返回504。
关键区别
状态码 | 责任方 | 资源过载阶段 | 应对建议 |
---|---|---|---|
502 | 上游服务器 | 完全崩溃或无响应 | 检查后端服务状态 |
503 | 当前服务器 | 主动拒绝新请求 | 按Retry-After重试 |
504 | 上游服务器 | 处理超时但未崩溃 | 优化请求或延长超时时间 |