HTTP 状态码速查表

1xx-5xx 全覆盖,每条状态码含含义、常见原因与 2 条以上具体排查建议,支持按码号或关键词搜索

易混淆状态码对比

实际开发中最容易拿错的两对状态码:选错码不会让接口"不能用",但会让调用方排查方向完全跑偏,网关告警和监控规则也会跟着失真。

400Bad Request · 请求本身就是坏的

含义:请求报文在语法层面就错了,服务器根本没法解析。

典型例子:POST 的 body 声明是 JSON,实际内容却是 {"name": "张三",,}——多了一个逗号,任何服务器都解析不出来,只能回 400。

422Unprocessable Content · 请求能解析,但语义过不了

含义:报文格式完全正确,服务器读得懂,但内容校验失败(如字段缺失、取值越界、业务规则不满足)。

典型例子:提交 {"age": -5}——JSON 语法没问题,服务器成功解析后才发现年龄是负数,应回 422 并在 body 里列出具体校验错误。

一句话记忆:JSON 都解析不了 → 400;解析得动但"内容不合格" → 422。判断技巧:把同样的请求体丢进 JSON 格式化工具,报语法错就是 400 的问题,能格式化却报接口校验错就是 422 的问题。

401Unauthorized · 你是谁?(未认证)

含义:服务器不知道你是谁——请求没带身份凭证,或凭证无效/过期。

典型例子:不带 Authorization 头直接访问需要登录的接口,或 Token 过期后仍用旧凭证请求。响应通常带 WWW-Authenticate 头,客户端正确做法是引导用户重新登录,而不是重试原请求。

403Forbidden · 我知道你是谁,但你没资格(已认证无权限)

含义:服务器认出了你,但你的角色/权限不够,拒绝执行,且重试也不会有用。

典型例子:普通用户登录后调用删除用户的管理接口——Token 有效(能通过认证),但没有管理员权限。此时该提示"权限不足",而不是让用户再登录一次。

一句话记忆:401 回答"你是谁",403 回答"你配不配"。判断技巧:换一个有效凭证重试能成功 → 刚才是 401;凭证有效仍被拒 → 是 403,去查角色权限配置。

301Moved Permanently · 永久重定向(经典版)

含义:资源已永久迁移到新 URL,今后都该用新地址。但规范未强制保留请求方法——历史上一批客户端会把 POST/PUT 自动降级成 GET 再重放。

典型例子:老页面 /about.html 永久搬到 /about/,纯浏览场景用 301 没问题(搜索引擎权重也转移);但如果重定向的是一个 POST 下单接口,客户端的方法可能被偷偷改成 GET,下单参数直接丢在半路。

308Permanent Redirect · 永久重定向(严格版)

含义:同样是永久迁移,但规范强制保留原请求方法与请求体——POST 过去还是 POST,body 一字不丢。

典型例子:API 域名从 api.old.com 整体迁到 api.new.com,用 308 才能保证调用方的 POST/PUT/PATCH 原样重放;浏览器对 308 的支持已全面覆盖现代客户端,老到 IE 的场景才需要退回 301 并自己评估方法降级风险。

一句话记忆:给人看的页面用 301,给程序调的接口用 308。判断技巧:重定向后如果需要"方法和请求体绝对不变",无脑选 308;只是网页地址搬迁,301 就够且兼容性口碑更好。

502Bad Gateway · 上游给了我无效响应

含义:网关/反向代理(Nginx、负载均衡、CDN)还活着,但它身后的应用进程挂了、崩了或回了协议级垃圾数据。

典型例子:应用进程 OOM 被杀、还没起来,Nginx 转发后收到连接拒绝,回 502。排查方向:先看应用进程是否存活(systemctl status / 容器是否重启),再看应用错误日志,最后才查 Nginx 的 proxy_pass 地址写对没有。

503Service Unavailable · 服务暂时不可用(通常可重试)

含义:服务端主动表示"现在忙不过来或正在维护",通常是过载保护、限流熔断或计划内停机,语义上暂时性、稍后重试有意义。

典型例子:流量洪峰触发限流、发版重启窗口、数据库连接池打满触发保护。规范建议响应带 Retry-After 头;CDN 命中维护页时也常回 503。看到 503 先确认是不是自己触发限流,再查扩容/维护公告。

一句话记忆:502 是"中间人替上游报丧"(应用大概率挂了,重试前先修),503 是"服务自己喊暂停"(暂时性,按 Retry-After 退避重试)。判断技巧:502 查应用进程生死,503 查限流规则与维护窗口。

怎么用这个状态码速查表

遇到接口报错或页面打不开时,先把浏览器开发者工具(F12 → Network 面板)或后端日志里看到的状态码记下来,然后在顶部搜索框输入码号(如 404)或关键词(如 timeout、redirect),表格会实时过滤出匹配的条目。每条状态码包含三个字段:含义说明这个码代表什么,常见原因列出最容易触发它的场景,排查建议给出至少 2 条可以直接动手的操作步骤。分组标题(1xx 信息 / 2xx 成功 / 3xx 重定向 / 4xx 客户端错误 / 5xx 服务端错误)可以点击折叠,方便只看当前关心的那一组。

排查顺序建议:4xx 开头先检查客户端——请求 URL、请求头、鉴权 token、请求体格式是否正确;5xx 开头优先查服务端——应用日志、数据库连接、上游接口超时;3xx 关注重定向链是否成环(可用 curl -I 逐跳跟踪);1xx 和 2xx 一般无需处理,但 200 里包着业务错误码的情况值得留意。本页还收录了 418 I'm a teapot 彩蛋码、Nginx 私有码(444/499)和 Cloudflare 系列码(520-527),排查网关层问题时不至于一头雾水。

常见问题

404 和 410 有什么区别?404 表示资源当前不存在但未来可能出现;410 表示资源已被永久删除。搜索引擎对 410 的除权更快,删除内容建议优先返回 410。

301 和 302 该用哪个?永久迁移用 301(权重会转移),临时跳转(如维护页、A/B 测试)用 302 或 307。滥用 302 做永久跳转会导致搜索引擎收录混乱。

500 和 502、504 怎么区分责任?500 是应用自己抛异常,查应用日志;502 是网关收到上游无效响应,查上游服务是否崩溃;504 是上游超时,查慢查询和接口耗时。看到 502/504 先确认应用进程活着,再查 Nginx 的 proxy_timeout 配置。

429 出现后该怎么办?这是限流响应。查看响应头里的 Retry-After,按提示等待后重试;客户端应实现指数退避,而不是立刻疯狂重试把限流窗口越拉越长。

这个页面是纯静态的吗?数据会上传吗?是纯静态页面,搜索、过滤、折叠全部在浏览器本地完成,不发送任何请求到服务器,也不存储你的输入。