我的测试学习站TEST LEARNING HUB
开始学习
首页/精华文章/4. 状态码 200 302 400 401 403 404 500 怎么理解

4. 状态码 200 302 400 401 403 404 500 怎么理解

HTTP 状态码是接口测试和抓包定位中最常见的判断依据。很多测试同学看到接口返回 200 就认为成功,看到 500 就认为后端 Bug,看到 404 就说接口不存在。这样的理解太粗。状态码只能说明 HTTP 层面的结果,真正定位问题还要结合请求参数、响应体业务 code、Header、日志、网关和数据库状态。

面试中问 200、302、400、401、403、404、500,面试官想看你是否能把状态码和项目排查结合起来。你要能解释每个状态码大致含义,更要能说明在测试中遇到这些状态码怎么定位。尤其是 401 和 403 的区别、HTTP 200 和业务成功的区别、404 是前端路径还是后端路由问题、500 如何结合日志排查,这些都是高频追问。

一、状态码在测试中的作用

HTTP 状态码是服务端对请求处理结果的一个标准化反馈。它可以帮助测试快速判断问题方向:

  • 请求是否成功到达服务端;
  • 是否发生重定向;
  • 请求参数是否有问题;
  • 是否未登录或无权限;
  • 接口路径是否不存在;
  • 服务端是否异常。

但状态码不是最终结论。很多系统会统一返回 200,再用响应体中的 code 表示业务成功或失败。所以测试不能只看状态码。

二、200 怎么理解

200 OK 表示 HTTP 请求成功。服务端正常返回了响应。

但要注意:HTTP 200 不代表业务成功。

例如:

{
  "code": 4001,
  "message": "库存不足",
  "data": null
}

HTTP 状态码是 200,但业务是失败的。

测试中遇到 200,要继续看:

  • 业务 code 是否成功;
  • message 是否符合预期;
  • data 字段是否正确;
  • 数据库状态是否变化;
  • 页面展示是否和响应一致。

面试可以说:200 是 HTTP 层成功,业务是否成功要看响应体和业务规则。

三、302 怎么理解

302 Found 表示临时重定向。浏览器会根据响应头中的 Location 跳转到另一个地址。

常见场景:

  • 未登录访问页面,被重定向到登录页;
  • HTTP 跳转 HTTPS;
  • 旧地址跳转新地址;
  • OAuth 或第三方登录跳转;
  • 网关或 Nginx 配置跳转。

测试中如果接口请求返回 302,要看 Location 指向哪里。比如接口自动化访问某个需要登录的接口,结果返回 302 到登录页,说明登录态可能失效。

常见误区是把 302 当成接口成功。实际上业务接口返回 302,往往说明请求被重定向,不一定拿到了预期数据。

四、400 怎么理解

400 Bad Request 表示客户端请求有问题,常见原因是参数格式错误、必填参数缺失、JSON 格式不合法、字段类型不匹配。

测试排查 400 时重点看:

  • 请求参数是否符合接口文档;
  • JSON 是否合法;
  • Content-Type 是否正确;
  • 必填字段是否缺失;
  • 字段类型是否正确;
  • URL 参数是否编码正确。

例如接口要求:

{
  "quantity": 2
}

前端传成:

{
  "quantity": "abc"
}

就可能返回 400。

五、401 怎么理解

401 Unauthorized 表示未认证。简单说,就是系统不知道你是谁,或者登录态无效。

常见原因:

  • 未登录;
  • Token 缺失;
  • Token 过期;
  • Token 格式错误;
  • Cookie 丢失;
  • Authorization Header 没带;
  • 登录态被清除。

测试排查 401 时要看请求 Header:

Authorization: Bearer xxx
Cookie: JSESSIONID=xxx

如果 Header 没带,可能是前端问题、接口工具未配置、自动化脚本没有传 Token。如果带了但仍 401,可能是 Token 过期或服务端鉴权失败。

六、403 怎么理解

403 Forbidden 表示已认证但无权限。也就是说,系统知道你是谁,但你没有权限访问这个资源。

常见场景:

  • 普通用户访问管理员接口;
  • 用户 A 查询用户 B 的订单;
  • 没有菜单权限;
  • 没有操作权限;
  • IP 白名单限制;
  • 角色权限配置错误。

401 和 403 的区别是面试重点:

  • 401:未登录或认证失败;
  • 403:已登录但权限不足。

测试权限时,要分别覆盖未登录、普通用户、管理员、越权访问等场景。

七、404 怎么理解

404 Not Found 表示资源不存在。接口测试中常见原因:

  • URL 路径写错;
  • 接口未发布;
  • 网关路由未配置;
  • 服务版本不对;
  • 请求方法不匹配;
  • 前端调用旧接口;
  • Nginx 转发路径错误。

注意,404 不一定是后端代码没有接口,也可能是网关或前端路径问题。

排查时可以看:

  • 请求 URL 是否正确;
  • 请求方法是否正确;
  • 接口文档是否一致;
  • 服务是否部署新版本;
  • 网关是否转发到正确服务;
  • 后端日志是否收到请求。

如果后端日志完全没有请求,可能请求没到服务。

八、500 怎么理解

500 Internal Server Error 表示服务端内部错误。

常见原因:

  • 空指针异常;
  • 数据库异常;
  • SQL 错误;
  • 第三方接口超时;
  • 配置错误;
  • Redis/MQ 连接失败;
  • 文件权限问题;
  • 代码逻辑异常。

测试遇到 500 时不能只提“接口 500”。要记录:

  • 请求时间;
  • 请求 URL;
  • 请求参数;
  • 请求 Header;
  • 响应体;
  • 业务 ID;
  • 后端日志关键异常。

这样开发才能快速定位。

九、状态码和业务 code 的关系

很多公司接口返回:

{
  "code": 0,
  "message": "success",
  "data": {}
}

这里 HTTP 状态码和业务 code 是两层含义。

HTTP 状态码表示请求层结果;业务 code 表示业务处理结果。

例如:

  • HTTP 200 + code 0:业务成功;
  • HTTP 200 + code 4001:业务失败;
  • HTTP 401:认证失败;
  • HTTP 500:服务异常。

测试断言时,不能只断言 HTTP 状态码,还要断言业务 code 和关键字段。

十、面试回答模板

如果面试官问这些状态码怎么理解,可以这样回答:

我会把状态码当成 HTTP 层面的判断依据,但不会只看状态码。200 表示请求成功到达并返回,但业务是否成功还要看响应体 code;302 是重定向,要看 Location;400 多是请求参数、格式或 Content-Type 问题;401 是未认证,比如 Token 缺失或过期;403 是已认证但无权限;404 是资源不存在,可能是路径、方法、路由或版本问题;500 是服务端异常,需要结合请求参数和后端日志定位。测试中我会通过状态码先判断方向,再结合业务 code、响应体、Header、日志和数据库确认根因。

十一、常见追问

追问:401 和 403 区别?

401 是未认证或登录态无效;403 是已认证但权限不足。

追问:HTTP 200 是否代表接口成功?

不一定。还要看业务 code、message、data 和业务数据是否正确。

追问:404 一定是后端没有接口吗?

不一定。可能是前端路径错、请求方法错、网关路由错、服务版本不对或 Nginx 转发错。

追问:500 怎么提 Bug?

附上请求 URL、方法、参数、Header、响应、时间点、业务 ID 和关键日志异常。

十二、练习清单

  1. 用 Postman 观察 200 响应;
  2. 模拟未登录接口 401;
  3. 模拟无权限接口 403;
  4. 请求错误路径观察 404;
  5. 构造错误参数观察 400;
  6. 观察登录失效是否 302;
  7. 区分 HTTP 状态码和业务 code;
  8. 为接口自动化添加状态码断言;
  9. 为接口自动化添加业务 code 断言;
  10. 准备状态码面试回答。

状态码是定位方向,不是最终结论。优秀测试工程师会用状态码快速缩小范围,再结合请求、响应、日志和业务数据完成定位。

配套刷题: