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 不一定是上游崩,也可能是「网关等不及」——这点记住能省很多冤枉时间。
相关教程
- Blackbox Exporter 黑盒探测 — 用探针抓取状态码做可用性监控
- Nginx 502 排查 — 网关与上游的经典故障现场
- CDN 原理 — 边缘节点的缓存与状态码行为