前端必须懂!HTTP 状态码到底是哪里来的?怎么用?

11 阅读5分钟

前端必须懂!HTTP 状态码到底是哪里来的?怎么用?

🌐 前端开发中你是否遇到过这些情况?

  • 明明接口写对了,却返回 404 Not Found
  • 登录后访问接口被拦下,提示 401 Unauthorized
  • 页面一直白屏,F12 一看原来是 500 Server Error

别慌!这一切的背后,藏着一个你必须掌握的知识点:HTTP 状态码

本文将彻底解答两个关键问题:

🧠 它到底是怎么来的?
🛠️ 前端到底怎么用它、如何处理它?


一、📦 HTTP 状态码是从哪来的?

HTTP 状态码是服务器返回的请求处理结果的编号,并不是前端生成的。

🧩 一个 HTTP 请求完整流程:

浏览器/前端发出请求
        ↓
服务器接收到请求 → 处理逻辑 → 返回结果
        ↓
前端拿到结果状态码 + 数据

举个真实例子,浏览器发起 /api/user 请求,服务器返回:

HTTP/1.1 200 OK
Content-Type: application/json

{
  "username": "小明",
  "age": 18
}
  • 200 OK:就是 HTTP 状态码,表示请求成功
  • 它位于响应头中(不是 body)
  • 前端通过 response.status 读取它的值

二、📊 HTTP 状态码五大类,一句话记住!

分类范围关键词含义
1xx100–199继续请求处理中(很少见)
2xx200–299成功请求处理完成
3xx300–399重定向资源地址发生变化
4xx400–499你错了客户端请求有误
5xx500–599我炸了服务端处理失败

📌 口诀:继续走、搞定了、跳一下、你错了、我炸了


三、✅ 2xx:请求成功类状态码(前端最常见)

状态码含义实际场景
200 OK请求成功获取用户信息、文章列表
201 Created创建成功提交表单、新增资源
204 No Content成功但无内容删除成功,不需要返回体

实战示例:

axios.post('/api/article', data).then(res => {
  if (res.status === 201) {
    alert('发布成功');
  }
});

四、🔁 3xx:重定向类状态码(你访问的资源搬家了)

状态码含义场景
301 Moved Permanently永久重定向网站改域名,旧地址不再使用
302 Found临时重定向登录后跳转首页
303 See Other用 GET 方式跳转其他页面表单提交后跳转到结果页
304 Not Modified本地缓存可用浏览器资源未变,走缓存
307 Temporary Redirect临时重定向,方法不变API 服务降级临时跳转

实战说明:

  • 大部分 3xx 浏览器自动处理,前端感知不到
  • 304 是浏览器缓存优化的关键,能显著提高加载性能

🔧 如何触发 304?

如果你开启了资源缓存,例如:

Cache-Control: max-age=3600
ETag: "v1.0.0"

下一次请求资源时,浏览器会自动判断是否修改,如果没变,就返回:

304 Not Modified

此时资源走缓存,页面秒开不是梦!


五、❌ 4xx:客户端错误类状态码(你这边请求错了)

状态码含义场景
400 Bad Request请求参数有误JSON 拼错、缺字段
401 Unauthorized未授权访问没登录或 token 失效
403 Forbidden权限不足用户不是管理员
404 Not Found资源不存在接口或页面地址写错了
405 Method Not Allowed请求方式不支持用 GET 调了只能 POST 的接口

实战处理:

axios.get('/api/userinfo').catch(err => {
  const status = err.response.status;
  if (status === 401) {
    alert('请先登录');
    router.push('/login');
  } else if (status === 404) {
    alert('接口地址错误');
  }
});

六、💥 5xx:服务器错误类状态码(不是你的错,但你要兜底)

状态码含义场景
500 Internal Server Error后端异常逻辑崩溃、代码报错
502 Bad Gateway网关错误Nginx 代理失败
503 Service Unavailable服务暂时不可用系统维护、限流中
504 Gateway Timeout网关超时接口处理太慢,超时了

前端建议:

  • 不要直接崩页面!
  • 应该提示用户:服务器异常,请稍后重试
  • 并记录日志方便后续排查(埋点系统)

七、🛠️ 前端实战:如何使用状态码写出稳健代码?

1. 利用 axios 拦截器统一处理状态码

axios.interceptors.response.use(
  res => res,
  err => {
    const status = err.response?.status;
    switch (status) {
      case 401:
        router.push('/login');
        break;
      case 403:
        alert('无权限访问');
        break;
      case 500:
        alert('服务器错误');
        break;
    }
    return Promise.reject(err);
  }
);

2. 使用浏览器 Network 面板快速调试

  • F12 → Network → 找到对应请求 → 看 Status
  • 配合 Preview / Response / Headers 找具体原因

八、📌 状态码速查表(建议收藏)

类型状态码含义
✅ 成功200OK,最常见
✅ 成功201创建成功
✅ 成功204删除成功,无返回
🔁 跳转301永久跳转
🔁 跳转302临时跳转
🔁 跳转304浏览器缓存
❌ 错误400请求错误
❌ 错误401未登录
❌ 错误403无权限
❌ 错误404资源不存在
💥 异常500服务器炸了
💥 异常502网关故障
💥 异常503服务挂了
💥 异常504响应超时

九、⚠️ 常见误区别再踩了!

错误理解正确认知
“404 是服务器出错”❌ 是你请求地址错了
“401 和 403 差不多”❌ 401 是没登录,403 是没权限
“状态码错误前端处理不了”✅ 应该兜底处理,防止白屏
“只处理 200 就够了”❌ 所有可能返回的状态码都应该处理

🔚 总结:HTTP 状态码是前端调试的方向盘!

  • 它来自服务端,是请求的处理反馈
  • 是前后端沟通的桥梁,前端必须理解和善用
  • 掌握它,就能让你在调试、性能优化、异常处理中游刃有余