引入
每次请求都有结果,但前端拿到的不只是数据——服务器会先用一个三位数字表达”这次请求怎么样”。看不懂状态码,排查接口问题就只能靠猜;看懂了,一眼就能分清是前端传错参数、还是后端炸了。
正文
定义
HTTP 状态码是服务器响应的第一行中用来表示请求结果的三位数字,按首位分为 1xx ~ 5xx 五大类。
五大类含义
| 状态码段 | 含义 | 前端动作 |
|---|---|---|
| 1xx | 信息性,请求还在处理 | 基本不用管 |
| 2xx | 成功 | 正常处理数据 |
| 3xx | 重定向 / 缓存 | 关注跳转与缓存命中 |
| 4xx | 客户端错误 | 检查请求参数、权限、URL |
| 5xx | 服务器错误 | 找后端,保留请求信息 |
常见状态码速查
| 状态码 | 含义 | 典型场景 |
|---|---|---|
| 200 | 成功 | GET 拿到数据、POST 提交成功 |
| 204 | 成功但无响应体 | DELETE 成功、心跳请求 |
| 301 | 永久重定向 | 域名迁移,浏览器会缓存 |
| 302 | 临时重定向 | 登录跳转 |
| 304 | 走缓存 | 协商缓存命中,见 HTTP缓存 |
| 400 | 请求参数错误 | 前端传参格式不对 |
| 401 | 未认证 | 没登录或 token 失效 |
| 403 | 无权限 | 登录了但权限不够 |
| 404 | 资源不存在 | URL 打错、资源被删 |
| 429 | 请求过于频繁 | 触发限流 |
| 500 | 服务器内部错误 | 后端代码异常 |
| 502 | 网关收到无效响应 | 后端服务挂了 |
| 504 | 网关超时 | 后端处理太慢 |
记忆技巧:4 开头先怀疑自己,5 开头先怀疑后端,3 开头先想缓存和跳转。
前端容易误解的几个点
- 301 和 302 的区别在缓存:301 会被浏览器长期缓存,误用后很难撤回;不确定时先用 302。
- 304 不是错误:它是协商缓存命中,反而是性能好的表现。
- 401 和 403 的区别:401 是”你是谁我还不认识”(未认证),403 是”我知道你是谁,但你没权限”(未授权)。
- 状态码正确 ≠ 业务成功:很多接口返回 200 但 body 里带
code: -1,这是业务层错误码,要和 HTTP 状态码分开处理。
引出
304 之所以能生效,依赖的是请求头里的条件字段(If-None-Match / If-Modified-Since),这就引出了 HTTP 缓存的完整机制——强缓存和协商缓存如何配合,是前端性能优化的核心内容。另外,重定向链路对首屏耗时的影响也值得单独测量。