HTTP状态码,这5个最常用

  • 约1490字
  • 技术
  • 2026年4月1日

很多人看到后端返回400、500,第一反应是「后端有问题」。但实际上,很多问题出在请求本身。经验丰富的开发者,往往看一眼状态码就知道该查谁的问题。

今天分享我日常最常打交道的5个状态码,以及对应的排查思路。

1. 400 Bad Request:请求本身有问题

这个锅通常在前端。

常见原因就那么几个:参数漏了、格式不对、编码有问题。我遇到最多的是这两种:

一是必填参数没传。 比如某个接口要求传userId,你漏掉了,后端一解析直接报错。

二是JSON格式不对。 特别容易出现在手写请求体的时候,少个逗号、多个括号,400就来了。

排查技巧:

  • 打开浏览器Network面板,看请求体里到底发的是什么
  • 用curl或Postman复现请求,看返回的具体错误信息
  • 后端通常会在响应body里告诉你哪个字段有问题
// 常见错误:Content-Type不匹配
fetch('/api/user', {
  method: 'POST',
  body: JSON.stringify(data), // 数据是JSON
  headers: {
    'Content-Type': 'application/x-www-form-urlencoded' // 头部写错了!
  })
})

2. 401 Unauthorized:身份没通过

这个状态的本质是「你不认识」或「你的凭证过期了」。

两种常见场景:

一是没登录就访问需要授权的接口。 这种情况前端要判断是否跳转登录页。

二是Token过期了。 特别是Bearer Token,很多后端会设个几小时的有效期。

排查技巧:

  • 先确认本地存储的Token还在不在
  • 看请求头里有没有带Authorization
  • 检查Token格式是否正确(通常是Bearer xxx
  • 如果用的是JWT,试试用在线工具解码payload部分,看exp字段有没有过期
// 正确写法
const token = localStorage.getItem('access_token');
fetch('/api/protected', {
  headers: {
    'Authorization': `Bearer ${token}`
  }
})

3. 403 Forbidden:你没权限

这个和401容易混淆。简单说:401是"不认识你",403是"认识你但不让你进"。

常见场景:

  • 普通用户访问管理员接口
  • 登录了,但某些功能需要额外权限
  • IP被后端拉黑了

排查技巧:

  • 确认当前账号的权限级别
  • 看接口文档里这个接口需要什么权限
  • 如果是测试环境,问后端是不是在白名单里

4. 404 Not Found:资源不存在

这个状态码很诚实——找不到就是找不到。

但容易忽略的一个细节是:同样是404,可能是前端路由问题,也可能是后端接口真没了。

排查思路:

  • 先确认请求URL拼对了没有
  • 检查后端是不是悄悄改了接口路径
  • 如果是SPA应用,看是不是前端Router没匹配上
// 容易犯的错:多余的斜杠
// 错误
fetch('/api/users//profile')  // 双斜杠
// 正确
fetch('/api/users/profile')

5. 500 Internal Server Error:后端炸了

这是最让人头疼的,因为问题可能出在任何地方。

但从联调角度,我有兩個快速定位思路:

一是看响应body。 后端如果返回了堆栈信息,能直接定位到具体文件和行号。

二是查后端日志。 很多500错误后端已经记录了,你直接问后端要日志比自己猜快一百倍。

有个坑要提醒:有时候前端超时也会触发500,因为后端等太久直接抛异常了。如果你的请求特别慢,优先看看是不是接口本身响应时间长。

// 建议:添加超时处理
const controller = new AbortController();
const timeout = setTimeout(() => controller.abort(), 5000);

fetch('/api/slow-endpoint', { signal: controller.signal })
  .catch(err => {
    if (err.name === 'AbortError') {
      console.log('请求超时,可能是接口本身太慢');
    }
  })
  .finally(() => clearTimeout(timeout));

状态码速查表

状态码问题在谁优先排查方向
400前端请求参数、JSON格式、Content-Type
401前端Token是否存在、是否过期、格式对不对
403后端/权限当前账号权限、接口要求权限
404双方URL拼写、后端接口是否变更
500后端后端日志、接口响应时间

写在最后

状态码是前后端沟通的第一道语言。看懂这5个,最少能覆盖日常80%的联调问题。

我的习惯是:拿到接口文档先扫一遍所有可能的状态码和对应含义,而不是踩坑了再去查。这样联调效率至少能提升一半。

下次再看到500,别急着喊后端。先看看是不是自己请求有问题。排除了前端,再去找后端也不迟。

相关文章

2小时缩短到10分钟?AI帮你快速定位bug

线上出现bug后,你是否还在逐行搜索日志?本文分享如何用AI工具将bug定位时间从2小时缩短到10分钟,包含具体工具、提示词模板和实操步骤。

查看更多

智能编程革命:六大代码生成工具选择指南

介绍了六款国内外主流代码生成工具,包括GitHub Copilot、MarsCode、文心快码、通义灵码、CodeWhisperer 和 CodeGeeX,并做简单的比较。

查看更多

把 AI 从“问答助手”变成“交付搭子”

通过一个项目救火案例,拆解如何用“上下文工程 + 任务分层 + 复盘闭环”让 AI 真正提升团队交付效率。

查看更多