浏览器或客户端每发起一次 HTTP 请求,服务器都会在响应行里返回一个三位数字状态码, 并配合原因短语(仅供参考,客户端不应依赖短语文本)。 RFC 9110(继承并整合早期 HTTP 语义规范)按首位数字把响应分成五类;理解分类比死记每一个码更重要。

入门:五类状态码(背首位即可)

  • 1xx(Informational):临时响应;常见如 100 Continue,多数应用层代码很少直接处理。
  • 2xx(Success):成功被理解并接受;200 OK 最常见,204 No Content 表示成功但无正文实体。
  • 3xx(Redirection):需要客户端采取额外动作;301/308 常涉永久迁移,302/307 涉临时重定向,语义细节以 RFC 为准。
  • 4xx(Client Error):请求有问题或权限不足;404401403429 高频。
  • 5xx(Server Error):服务器声称自己没能完成看似有效的请求;含网关/上游问题时也可能见到 502/503/504

深入:几个高频码在排障时的含义

  • 301 vs 302:不仅是「永久 vs 临时」,还影响缓存与 SEO 行为;API 若错误使用会导致客户端长期记住错误 URL。
  • 304 Not Modified:条件 GET 命中缓存验证,省带宽;若调试时疑惑「为什么没 body」,先看协商头(If-None-Match/If-Modified-Since)。
  • 401 vs 403:语义上常简化记为「未认证 vs 已认证但禁止」;实际 API 混用并不罕见,要以文档为准。
  • 429 Too Many Requests:触发了限流;应读 Retry-After(若有)并退避重试,而非疯狂重试放大故障。

调试习惯:先看状态码大类,再看响应体

许多框架会把详细错误放在 JSON 体里,但状态码仍决定中间代理、缓存与客户端库的默认行为。 与 TLS、DNS 问题区分:能收到 HTTP 状态行通常说明 TCP/TLS 至少已经完成到应用响应阶段(特例:中间设备合成页面)。

精确语义与弃用码请以当前 RFC 9110 及后续「废弃码」章节为准;不同版本 HTTP(HTTP/1.1、HTTP/2、HTTP/3)在帧格式上不同,但语义分类延续。

与其它主题的衔接

前置阅读 TCP/IPHTTPS; 会话与登录态见 Cookie 与 Session; API 风格见 RESTJSON