引入

每次请求都有结果,但前端拿到的不只是数据——服务器会先用一个三位数字表达”这次请求怎么样”。看不懂状态码,排查接口问题就只能靠猜;看懂了,一眼就能分清是前端传错参数、还是后端炸了。

正文

定义

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 缓存的完整机制——强缓存和协商缓存如何配合,是前端性能优化的核心内容。另外,重定向链路对首屏耗时的影响也值得单独测量。