状态码用对了,线上少一半误会:HTTP状态的日常清单

梳理最常见HTTP状态码的真实语义与网关/缓存/浏览器行为,多环境联调时的可观测与排障要点

优兔GOGO
2025年11月3日
开发教程
HTTP状态码网关缓存调试

状态码不是面试题,它是你和客户端“沟通”的语言。线上误会最多的地方,恰恰是“该返回什么码”。一个 200 包打天下,会让排障与风控越来越难。本文从工程落地角度梳理常见状态码,给出选型标准与排障清单。

首先要把“成功与失败”的边界说清楚:

  • 2xx 代表请求被正确接收并处理,返回数据是“业务结果”;
  • 4xx 是客户端问题(参数、鉴权、流量策略),要让客户端知道“怎么改”;
  • 5xx 是服务端问题,客户端重试可能有效,但也要做好熔断与退避。

几个关键码位:

  • 200 OK:一切正常;
  • 201 Created:资源已创建,配合Location指向新资源URL;
  • 204 No Content:处理成功但无内容,省流量;
  • 301/302:重定向,注意区别永久/临时;
  • 304 Not Modified:缓存命中,带好Etag/Last-Modified;
  • 400 Bad Request:参数错误;
  • 401 Unauthorized:未认证或Token过期;
  • 403 Forbidden:已认证但无权限;
  • 404 Not Found:资源不存在,避免泄漏敏感信息;
  • 409 Conflict:资源状态冲突(乐观锁冲突、重复提交);
  • 429 Too Many Requests:限流;
  • 500/502/503/504:依赖异常、服务不可用、超时。

工程上更重要的是“上下文约定”:

  1. 网关、服务、BFF 层统一错误模型;
  2. 对限流/熔断/黑名单要明确 429/403 的区分;
  3. 对可重试 vs 不可重试要在响应头或响应体里给出“意图”;
  4. 前端埋点与后端日志统一采集状态码与 trace-id,快速定位。

缓存相关的返回,建议认真使用 ETagCache-Control:静态资源优先 Cache-Control: max-age,动态内容结合 ETag 协商缓存,304会让“高频读”成本显著下降。

我们提供的“HTTP状态码大全”工具把完整列表与解释都做了分类整理,联调时可以快速查到“这个码到底应该怎么用”。工作台上常备一份清单,出问题的时候翻一眼,很多“争议”就不会发生。

最后给一份“减少争议”的Checklist:

  • 文档里明确每个接口的成功/失败码;
  • 非200时,响应体要给出机器可解析的错误码与人类可读的错误信息;
  • 限流/熔断要配额外标头提示剩余额度与恢复时间;
  • 重定向要指明新地址并注意缓存策略;
  • 线上告警按状态码维度聚合。

把状态码用对,团队沟通会顺畅很多,系统的可观测性也会整体提升。


相关在线工具: