跳转至

HTTP 状态码速查

纯前端:在下面输入代码(如 502)或关键词(如 超时、限流)即时筛选。数据不出浏览器,不联网、不记录。

怎么用

在筛选框里输入状态码数字或中文/英文关键词,表格只显示命中的行。比如输入 429 看限流,输入 网关 看所有网关相关码。

状态码分类速记

首位 类别 含义 责任方
1 信息 请求已收到,继续 协议层
2 成功 请求已正常处理 服务端
3 重定向 需要进一步操作 双方协商
4 客户端错误 请求本身有问题 客户端
5 服务端错误 服务端处理失败 服务端

一句话分界:4xx 看请求,5xx 看服务。看到 5xx 先想「是不是我的服务或上游挂了」,看到 4xx 先想「是不是调用方传错了」。

常用状态码明细

状态码 含义 运维场景
100 Continue 客户端可继续发送请求体(大体积上传前的试探)
101 Switching Protocols 协议升级,常见于 WebSocket 握手
200 OK 请求成功,最常规的健康信号
201 Created 资源已创建,REST 写接口常见
204 No Content 成功但无返回体,常用于删除或心跳
206 Partial Content 断点续传 / Range 请求命中,下载工具常用
301 Moved Permanently 永久重定向,SEO 权重转移,改域名首选
302 Found 临时重定向,不转移权重,活动页常用
304 Not Modified 缓存命中,条件请求下省带宽,不是错误
307 Temporary Redirect 临时重定向且不改请求方法
308 Permanent Redirect 永久重定向且不改请求方法
400 Bad Request 请求语法/参数错误,网关常因此拒
401 Unauthorized 未认证,缺令牌或令牌失效
403 Forbidden 已认证但无权限,注意和 401 区分
404 Not Found 资源不存在,路由没匹配或路径拼错
405 Method Not Allowed 方法不对(如用 GET 打 POST 接口)
408 Request Timeout 客户端太慢,服务端等不及
409 Conflict 资源冲突,常见于并发写
413 Payload Too Large 请求体超限,检查上传大小配置
416 Range Not Satisfiable Range 范围非法,断点续传异常
429 Too Many Requests 被限流,需要退避重试或调配额
500 Internal Server Error 服务端未捕获异常,先看应用日志
502 Bad Gateway 网关收到上游无效响应,查上游是否崩
503 Service Unavailable 服务过载或维护中,常配 Retry-After
504 Gateway Timeout 网关等上游超时,查上游延迟与超时配置
507 Insufficient Storage 服务端存储不足,查磁盘/配额
508 Loop Detected 代理转发出现环路

高频码的排查套路

502 / 503 / 504 三兄弟:它们都发生在「网关(Nginx、LB、CDN)和上游之间」。502 是上游回了非法响应(进程可能刚崩);503 是上游明确说「我不接」(过载保护或维护页);504 是上游太慢、网关等到超时。排查顺序:先看上游进程在不在 → 再看上游响应延迟 → 最后看网关的 proxy_read_timeout / proxy_pass 配置。三者往往同时出现,因为根因是同一个上游故障。

429 限流:被限流不代表你错了,只代表你太快。客户端要按 Retry-After 退避,服务端要确认限流阈值是否合理、是不是被错配成全局共享桶。网关层(如 Nginx limit_req)和 API 网关都可能返回 429。

401 vs 403:401 是「你谁啊」(没带凭证或凭证过期),403 是「我知道你是谁但不准进」(权限/角色不够)。调接口被拦时,先看是缺 token(401)还是角色不对(403),方向完全不同。

304 不是错:很多同学看到非 200 就紧张,但 304 是缓存正常工作的标志。客户端带 If-Modified-Since 或 ETag 来问「变了吗」,服务端说「没变」就回 304,浏览器接着用本地缓存。它能大幅省带宽,是好事。

从监控视角看状态码

状态码是健康检查的第一信号。像 blackbox-exporter 这类探测会直接抓取目标返回的码:期望 200 却拿到 502,探针立刻告警。2xx 占比、4xx 趋势、5xx 突增是三张最该盯的面板——5xx 一涨基本就是出事了,4xx 突增往往是客户端版本发错或接口契约变了。把状态码当指标,比等用户投诉早一步。

哪些码可以安全重试

客户端看到非 2xx 不一定该重试,乱重试会放大故障。经验法则:

  • 可重试:408、425(太早)、429(按 Retry-After 退避)、500、502、503、504(上游抖动,短间隔退避后多能恢复)。
  • 不要盲目重试:4xx 里除了 408/425,其余基本是请求本身有错,重试还是同样结果,只会刷错误日志。429 必须退避,硬重试反而被封更久。
  • 幂等前提:重试只对该幂等的写操作安全(GET 天然幂等;POST 下单这类非幂等,重试可能重复下单,要靠客户端去重或服务端幂等键)。

REST API 里怎么选对码

写接口时别一股脑回 200 包错误。语义正确的选择:

  • 创建成功用 201,删除成功用 204,查询无资源用 404(不是 200 带空数组)。
  • 参数校验失败用 400,而不是 500——把用户输入错误归到服务端异常会误导排障。
  • 需要鉴权的接口未带凭证回 401,带了但角色不对回 403,两者别混。
  • 资源冲突(如并发改同一行)回 409,让客户端决定怎么合并。

把码用对,调用方才能正确分流处理,监控也能按首位数区分「客户端问题」和「服务端问题」。

边缘 / CDN 节点的状态码玄机

CDN 和边缘节点会在你源站前面再包一层,状态码有时不是源站给的:

  • 边缘命中缓存可能直接回 200(或 304),根本没回源,所以源站日志里看不到这次请求。
  • 边缘到源站超时,边缘会回 502 / 504,但根因在源站或中间链路,不是边缘本身。
  • 边缘的 WAF 规则拦截会回 403,常常附自定义错误页,和源站 403 长得不一样。

排 5xx 时先分清「这个码是谁给的」:看响应头里的 Server / X-Cache / Via 等标记,能快速定位是边缘还是源站。

一个真实排查故事

某天告警 5xx 突增,看面板是 502 为主。按套路查:上游进程在不在?在。延迟高不高?不高。最后发现是网关的 proxy_read_timeout 被某次配置变更从 60s 调到 3s,而一个慢接口 p99 刚好 4s,于是正常请求被网关判超时、回 502,但源站其实在 4s 时已经处理完。把超时调回合理值、慢接口加缓存,502 立刻消失。502 不一定是上游崩,也可能是「网关等不及」——这点记住能省很多冤枉时间。

相关教程