HTTP 状态码是什么
状态码用三位数字表达请求结果,按首位分成五类:1xx 信息、2xx 成功、3xx 重定向、4xx 客户端错误、5xx 服务端错误。它是接口契约的一部分:客户端重试策略、网关熔断、监控告警与值班排障全都依赖它判断请求该怎么处理。
最容易混的几对
401 表示未认证,也就是缺少或凭证无效;403 表示已认证但无权限。两者混用会让客户端不知道该引导登录还是提示无权访问。409 用于并发写冲突与状态不允许,422 用于参数格式正确但语义不合法。权限不足时返回 404 是一种资源遮蔽手段,能减少枚举探测,代价是可调试性下降。
常用状态码
| 状态码 | 含义 | 常见误用 |
|---|---|---|
| 400 | 请求语法或参数错误 | 把业务校验失败一律归为 400 |
| 401 与 403 | 未认证与无权限 | 混淆两者,客户端无法区分引导动作 |
| 404 与 410 | 不存在与已删除 | 权限不足时用 404 掩盖,排障困难 |
| 409 | 状态冲突 | 并发写冲突未返回 409,客户端无法判断 |
| 422 | 语义不合法 | 与 400 混用,校验失败粒度丢失 |
| 429 | 请求过多 | 不携带重试等待时间 |
| 503 | 服务暂不可用 | 用 500 代替,掩盖过载与维护状态 |
基本信息
| 分类 | 1xx 信息、2xx 成功、3xx 重定向、4xx 客户端错误、5xx 服务端错误 |
|---|---|
| 幂等语义 | GET、PUT、DELETE 应当幂等,POST 不保证 |
| 重试判断 | 5xx 与 429 可退避重试,4xx 通常不应重试 |
| 监控口径 | 告警通常只对 5xx 与 429 设阈值 |
典型使用场景
- 接口设计:约定成功、参数错误、冲突与限流的返回码
- 客户端处理:区分可重试的 5xx 与不可重试的 4xx
- 监控告警:按状态码分类统计,避免噪音淹没真实故障
- 网关治理:依据状态码做熔断统计与降级决策
- 问题定位:以状态码快速判断问题归属在调用方还是服务方
4xx 表示客户端需要修改请求,5xx 表示服务端自身有问题。这个区分决定了修复方向,也决定了告警该叫醒谁,因此不要为了掩盖实现问题把 5xx 改写成 400。