首页/开发/软件测试速查/HTTP 状态码速查

HTTP 状态码速查

常用状态码:200/201/204 成功族、301/302/304 重定向与缓存、400/401/403/404/405/409/422/429 客户端错误、500/502/503/504 服务端错误;断言应区分具体状态码而不是「不等于 200 就失败」。

软件测试速查开发更新于 2026-10-13

HTTP 状态码是什么

HTTP 状态码是服务器对请求结果的标准化表达,RFC 9110 将其分为五类:1xx 信息、2xx 成功、3xx 重定向与缓存、4xx 客户端错误、5xx 服务端错误。对测试人员来说,状态码是接口断言的第一层证据:它区分了成功、拒绝与故障三种基本结局,也是排查问题的路标——401 与 403 指向鉴权设计的哪一层、502 与 504 指向哪一跳链路,语义不同,处理方式完全不同。断言时应核对具体状态码与响应结构,而不是笼统地看是否等于 200。

基本信息

规范来源RFC 9110(HTTP Semantics)
2xx 常用200 成功、201 已创建、204 无内容、206 部分内容
3xx 常用301 永久重定向、302 临时重定向、304 缓存有效
4xx 常用400 请求错误、401 未认证、403 无权限、404 不存在、405 方法不允许、409 冲突、422 语义错误、429 限流
5xx 常用500 内部错误、502 网关错误、503 不可用、504 网关超时
断言原则区分具体状态码,并校验响应体与关键响应头

典型使用场景

  • 接口断言精确化:创建返回 201 并校验 Location 头,删除返回 204 并确认无响应体
  • 鉴权矩阵测试:未登录断言 401、登录但无权限断言 403,两者不可互相替代
  • 并发与重复提交:用 409 验证冲突检测与幂等保护是否生效
  • 限流验证:触发 429 并检查 Retry-After 头与恢复时间是否符合配置
  • 缓存行为验证:带 If-None-Match 请求断言 304,确认 ETag 协商缓存生效
  • 故障定位:502 与 504 区分上游拒绝连接还是上游超时,快速缩小排查范围

curl 观察状态行与响应头

curl 观察状态行与响应头
curl -i -X POST https://api.example.com/orders -d '{"sku":"A-1"}'
# -i 输出状态行与响应头:创建成功应看到 201 Created 与 Location 头
curl -i https://api.example.com/orders/1 -H 'If-None-Match: "abc123"'
# 缓存仍有效时返回 304 Not Modified,且没有响应体
curl -i https://api.example.com/admin/users
# 未带凭证预计 401;带凭证但无权限预计 403

常见状态码测试关注点

状态码含义测试关注点
200/201/204成功/已创建/无内容201 校验 Location 头;204 校验响应体为空
301/302永久/临时重定向校验 Location 与后续请求方法是否保持
304未修改,缓存有效配合 ETag 与 If-None-Match 验证协商缓存
400/422请求格式错误/语义校验失败错误体应含字段级提示,不可吞细节
401/403未认证/无权限鉴权矩阵与越权用例必须分开断言
409资源冲突并发下单与重复提交场景的幂等保护
429请求过多被限流校验 Retry-After 与窗口恢复行为
502/503/504网关/服务/网关超时结合上游日志区分连接拒绝与超时
401 与 403 是两件事:401 表示缺少或无效凭证(先认证),403 表示凭证有效但权限不足(再授权)。把它们混在一起断言,认证缺陷与授权缺陷会互相掩盖。
304 不是失败:它是协商缓存命中的正常结果,测试应结合响应头(ETag、Last-Modified、Cache-Control)一起断言,确认缓存语义而不仅仅是状态码。
5xx 出现时先做职责划分:500 多为应用自身异常,502 指向上游拒绝或崩溃,504 指向上游超时;结合网关与应用两侧日志的时间戳对齐,能最快定位断点。
错误响应的结构也是接口契约的一部分:4xx 场景应断言错误码字段与提示文案结构,避免前端拿到空响应体无法给出用户提示。
重定向细看方法论:301/302 在历史实现中可能把 POST 改写为 GET,需要保持请求方法时用 307/308;测试重定向场景要同时断言请求方法不变与最终落地地址。

易错点

  • 断言状态码等于 200 覆盖全部场景:201/204 等正常结果被误报为失败
  • 把 401 与 403 混为一谈:认证与授权缺陷互相掩盖,越权问题漏检
  • 只断言 4xx 大范围不核对具体码与错误体:客户端无法区分的错误被放过
  • 把 304 当异常处理:缓存命中路径被误判为失败并误改缓存逻辑
  • 限流测试只验证 429 出现,不校验 Retry-After 与恢复行为:客户端重试风暴无人拦
  • 5xx 出现后直接重试不看日志:偶发还是必然、上游还是自身,永远分不清
  • 重定向链不做全程断言:多层跳转后最终地址与查询参数丢失无人发现,应校验落地 URL 与参数完整性

数据来源与参考

  • RFC 9110(HTTP Semantics)
  • MDN HTTP 响应状态码参考
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌