首页/网络/协议速查/状态码排查速查(客户端 vs 服务端)
HTTP 方法与状态码91 条

状态码排查速查(客户端 vs 服务端)

拿到一个状态码后,先判断责任侧,再按固定路径收集证据,避免盲目猜测。

协议速查网络更新于 2026-10-13

拿到状态码先判断责任侧

排查 HTTP 问题的第一步不是翻代码,而是判断这个状态码指向哪一侧:4xx 表示请求方需要调整,5xx 表示服务端出了问题,3xx 说明链路里还有一次跳转没走完。判断完责任侧,再按固定路径收集证据,避免在无关的层级上消耗时间。状态码本身已经给出了很强的前提,忽略它直接猜原因是最常见的低效做法。

排障索引

状态码大概率责任先看什么
400 与 422请求方请求体字段与服务端校验日志
401 与 403凭证与策略WWW-Authenticate、权限模型、WAF 日志
404 与 405路由与方法网关路由表、框架路由注册、Allow 头
408 与 429链路与限流超时配置、限流阈值与 Retry-After
413 与 414 与 431大小限制网关与框架各自的阈值配置
500应用应用日志与堆栈
502 与 503 与 504网关与上游网关错误日志、上游健康状态与耗时

三步定位法(以偶发 502 为例)

三步定位法(以偶发 502 为例)
# 1 用户侧证据:记录时间戳与请求标识
curl -sv -o /dev/null -w '%{time_total} %{http_code}\n' https://api.example.com/x
# 2 网关侧证据:按时间窗过滤错误日志
grep -i 'upstream' /var/log/nginx/error.log | tail -20
# 3 上游侧证据:确认进程与端口,再看应用日志
ss -lntp | grep 8080
journalctl -u app --since '10 min ago' | tail -50

排障时要记下什么

证据作用怎么取
精确时间戳把各方日志对齐curl 输出加上时间,或记录请求 ID
请求标识串联网关与上游日志响应头里的 request id 类字段
网关访问与错误日志判断请求到了哪一层按状态码与时间窗过滤
上游健康与耗时区分超时与崩溃网关里上游响应时间字段
变更记录判断是否由发布引起对照发布时间与故障起始时间

典型使用场景

  • 用户报错时快速定位责任侧,避免上下游互相推诿
  • 偶发 502 排查:把用户侧、网关侧与上游侧证据按时间对齐
  • 发布后验证:确认错误码分布是否出现新的异常取值
  • 限流问题定位:区分是调用方超频还是服务端阈值设置过低
  • 排查 404 激增:判断是路由变更还是域名解析到了旧服务
提高效率的关键是固定证据收集顺序:先拿到能复现的请求,再按时间窗去各层日志里搜同一时间点,最后才去读代码。顺序反了往往会在无关代码上耗掉大量时间。

易错点

  • 不区分责任侧就从业务代码开始读,5xx 的实际原因可能在网关或上游,排查时间被成倍拉长
  • 只拿到状态码没有时间戳与请求标识,各方日志无法对齐,最后只能靠猜
  • 把网关统一改写的错误码当成上游真实返回,误判责任方,修改方向完全错误
  • 排障期间改动多处配置,导致复现条件变化,反而无法验证真正有效的修复

数据来源与参考

  • RFC 9110 §15(各码语义)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌