
当你在浏览器、接口调试工具或日志里看到 401/403/404/429/502 之类的状态码时,不用先去背定义。更实用的思路是:把状态码当成‘故障分流器’,它告诉你问题更可能在认证、权限、路由、限流、网关还是后端。
步骤 1:先用“按症状”分类,而不是按数字记忆
你可以把状态码粗分成四类:
- 2xx 成功:请求被正确处理(但也可能业务失败在响应体里)。
- 3xx 跳转:资源位置变化(常见在 HTTP→HTTPS)。
- 4xx 客户端问题:请求不对/没权限/被限流。
- 5xx 服务端问题:网关或后端处理失败。
步骤 2:遇到 401/403:先分清“没登录”还是“没权限”
2.1 401 Unauthorized(通常是缺认证或认证失效)
- 检查请求是否带了 Authorization / Cookie。
- 检查 Token 是否过期、签名是否正确、时间是否偏差。
- 看响应头是否有
WWW-Authenticate(很多框架会提示需要哪种认证)。
2.2 403 Forbidden(通常是已认证但没权限)
- 检查账号角色、资源所有权、权限策略。
- 确认接口是否需要额外的 scope/权限声明。
- 反向代理是否做了 IP 黑白名单、路径保护。
步骤 3:遇到 404:别急着怪后端,先查路由链路
404 有三种常见来源:
- 应用真的没有这个路由(拼写/版本错误)。
- 网关/Nginx 没把请求转发到正确 upstream。
- 前端路由(SPA)刷新后被服务器当成静态文件路径导致 404。
3.1 快速检查顺序
- 确认 URL 是否正确,是否漏了前缀(如
/api)。 - 看网关访问日志:请求到没到后端?
- 如果是 SPA,确认服务器对未知路径做了 fallback 到
index.html。
步骤 4:遇到 429:这不是“服务器坏了”,是被限流了
429 Too Many Requests 表示你触发了限流策略。排障方向:
- 是否短时间重试太频繁(尤其是前端自动重试/轮询)。
- 是否多实例共享同一出口 IP,导致被按 IP 限流。
- 查看响应头是否有
Retry-After,按它的间隔退避。
步骤 5:遇到 502/503/504:把“网关层”单独拎出来看
这三类经常出现在 Nginx/反向代理/CDN 前面。
5.1 502 Bad Gateway:网关连不上后端或后端返回异常
- 后端进程是否在跑?端口是否监听?
- 网关到后端的网络是否通(安全组/防火墙)?
- 后端是否返回了非法响应(比如上游协议不匹配)?
5.2 503 Service Unavailable:后端不可用或被维护/熔断
- 服务是否被主动下线(维护页、灰度)?
- 负载均衡是否把流量打到空的 upstream?
- 是否触发熔断/过载保护?
5.3 504 Gateway Timeout:网关等后端等超时了
- 后端处理变慢(数据库慢查询、外部依赖超时)。
- 网关超时配置太小(
proxy_read_timeout)。 - 请求体太大/上传导致超时。
要点清单(工程化排障路径)
- 先复现:同一请求是否稳定复现?是否只在某些地区/时间段出现?
- 再分层:客户端 → DNS/证书 → CDN/网关 → 应用 → 数据库/依赖。
- 看日志:网关 access/error 日志 + 应用日志要能对上 request id。
- 做退避:遇到 429/5xx 重试要指数退避,避免雪崩。
常见问题 FAQ
1)为什么我明明登录了还 401?
常见原因是 Token 过期、请求没带上 Cookie(跨域/SameSite)、或你调用的是另一个域名导致会话不共享。优先用抓包/日志确认请求头里到底带了什么。
2)403 和 404 有时会混用吗?
会。有些系统会故意用 404 隐藏资源是否存在(安全策略)。你要结合日志与鉴权层判断。
3)502 一定是后端挂了吗?
不一定。也可能是网关到后端网络不通、DNS 解析错误、TLS/协议不匹配、或后端返回了网关无法解析的响应。
4)遇到 5xx 我该不该立刻重试?
可以重试,但要有限次数 + 指数退避,并区分幂等性(GET 更安全,支付/下单这类要谨慎)。盲目高频重试会把本来还能扛的服务压垮。