HTTP 状态码速查

1xx-5xx 常用状态码的含义与触发条件,按类别筛选,一句话讲清责任方。

状态码是 HTTP 的「体检报告」:2xx 好消息,4xx 你的问题,5xx 我的问题——大方向人人知道,但 401 与 403 的区别、502 与 504 的边界、307 与 302 在 POST 上的行为差异,才是排查问题时真正要分清的。这份速查表把常用状态码逐个列出:含义一句话讲清触发条件,并点明典型责任方。

内容按 RFC 9110(及后续更新)整理,覆盖信息类、成功类、重定向类、客户端错误与服务端错误五大类的 30 余个常用码。支持按代码或名称筛选(输 404 或 redirect 都行),按类别过滤一列。

最容易混的几组

401 vs 403:401 是「没登录或 Token 失效」(未认证),403 是「登录了但没权限」(已认证被拒)。502 vs 504:502 是网关收到上游的无效响应(上游挂了),504 是网关等上游超时(上游太慢)。301 vs 302 vs 307/308:301/308 永久迁移(搜索引擎转移权重),302/307 临时;带请求体时 307/308 保证方法不变,302 在实践中常被降级成 GET。

422 与 400 的边界

400 是请求在语法层就有问题(JSON 解析失败、缺参数);422 是语法正确但语义不合法(邮箱格式不对、取值超出范围)。API 设计里把参数校验失败统一映射到 422、结构错误映射到 400,前端就能据此区分「该修请求结构」还是「该改字段值」。

常见问题

状态码是浏览器发的还是服务器发的?
服务器发的(包括中间的反向代理)。你在浏览器看到的 502/504 往往是 Nginx/CDN 产的,而不是应用本身——排查时先分清是谁在说话。
为什么有些状态码表格里查不到?
本表收录常用码;一些保留码(如 418)与扩展码(WebDAV 的 207 等)不在常规排查路径上,故未列出。
想实际复现这些状态码?
用站内的 curl 转换器把示例命令转成代码即可发起真实请求;时间相关的 408/429 行为可结合时间戳与时区工具核对。

相关工具