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 和关键日志异常。
十二、练习清单
- 用 Postman 观察 200 响应;
- 模拟未登录接口 401;
- 模拟无权限接口 403;
- 请求错误路径观察 404;
- 构造错误参数观察 400;
- 观察登录失效是否 302;
- 区分 HTTP 状态码和业务 code;
- 为接口自动化添加状态码断言;
- 为接口自动化添加业务 code 断言;
- 准备状态码面试回答。
状态码是定位方向,不是最终结论。优秀测试工程师会用状态码快速缩小范围,再结合请求、响应、日志和业务数据完成定位。
配套刷题:

