2026/07/21

HTTP 状态码完全指南:从 100 到 599 的排障、SEO 与 API 设计用法

按 IANA 与 RFC 9110 梳理 HTTP 状态码:1xx 到 5xx、常见非标准码、易混淆状态码,以及 API 设计和站点排障中的正确用法。

HTTP状态码错误码APISEO

HTTP 状态码最有价值的地方不是“背出所有数字”,而是在排障时快速判断问题落在哪一层:请求还没发完整、资源不存在、权限不够、缓存命中、被限流、网关拿不到上游响应,还是服务本身暂时不可用。

有效 HTTP 状态码范围是 100599。客户端遇到不认识的状态码时,应先按首位数字理解类别:1xx 信息响应,2xx 成功,3xx 重定向,4xx 客户端或请求侧错误,5xx 服务器、代理或上游错误。600 以上不是标准 HTTP 状态码。

先用五个大类定位问题

范围含义排查方向
1xx临时信息请求仍在处理中,通常不作为最终结果处理
2xx成功请求被接收、理解并完成,注意是否需要返回正文
3xx重定向检查 Location、缓存、永久/临时迁移和请求方法是否保留
4xx请求侧错误检查路径、参数、认证、授权、资源生命周期和限流
5xx服务侧错误检查应用异常、代理、上游、依赖、超时和维护状态

1xx:最终响应前的临时信号

100 Continue 常用于 Expect: 100-continue,让客户端先确认服务器愿意接收请求体,再上传大文件。101 Switching Protocols 表示服务器同意通过 Upgrade 切换协议。102 Processing 来自 WebDAV,表示请求已收到且仍在处理。103 Early Hints 可在最终响应前提前发送资源提示,例如预加载 CSS、脚本或字体。104 Upload Resumption Supported 与可恢复上传规范相关,实际采用前应核对 IANA 当前登记和客户端支持。

2xx:成功不等于都该返回 200

200 OK 是通用成功响应,但创建资源时 201 Created 更准确,并应尽量配合 Location 指向新资源。异步任务应考虑 202 Accepted,它只表示任务已被接收,不保证最终成功。保存、删除、标记已读这类无需返回正文的操作,可以用 204 No Content,且响应不应包含正文。

206 Partial Content 对断点续传、音视频拖动和大文件分段下载很关键。WebDAV 场景里还会遇到 207 Multi-Status208 Already Reported226 IM Used 表示服务器对资源应用了实例操作,现实中较少见。

3xx:重定向最容易影响 SEO 和请求方法

301 Moved Permanently308 Permanent Redirect 都表示永久迁移,但 308 要求保持原请求方法和请求体。302 Found307 Temporary Redirect 都可用于临时重定向,区别同样在于 307 明确要求保持方法。表单提交后跳到结果页,常用 303 See Other,让客户端改用 GET 请求结果页。

304 Not Modified 不是“没有内容”的普通成功响应,而是条件请求命中缓存,客户端可以继续使用本地缓存。305 Use Proxy 已废弃,306 保留不用,新系统不要分配它们。

4xx:请求、资源、身份和频率问题

400 Bad Request 适合请求语法、格式、消息边界或整体编码错误。语法正确但业务语义无法处理时,422 Unprocessable Content 往往更清楚。资源状态冲突、重复创建、乐观锁失败或状态机不允许操作时,用 409 Conflict 比用 400 更能指导客户端修复。

401 Unauthorized 实际表达“未认证”,通常应带 WWW-Authenticate403 Forbidden 是服务器理解请求但拒绝执行,常见于权限不足、安全策略或 IP 规则。404 Not Found 是找不到或不愿透露是否存在;如果确认资源永久移除,410 Gone 更准确。

接口设计里还要认真处理这些码:405 Method Not Allowed 必须带 Allow413 Content Too Large 表示请求体过大;415 Unsupported Media Type 多半是 Content-Type 或编码不符合接口要求;425 Too Early 用于拒绝可能被 TLS 0-RTT 重放的请求;428 Precondition Required 可强制客户端携带条件头避免丢失更新;429 Too Many Requests 表示限流,最好配合 Retry-After431 Request Header Fields Too Large 常见于 Cookie 或认证头过大;451 Unavailable For Legal Reasons 表示因法律原因不可用。

5xx:不要把所有服务侧问题都塞进 500

500 Internal Server Error 是兜底码,不应成为所有异常的默认遮羞布。服务器完全不支持某个功能或方法时,501 Not Implemented 更准确;反向代理从上游收到无效响应时是 502 Bad Gateway;维护、过载或依赖暂时不可用时是 503 Service Unavailable;代理等待上游超时是 504 Gateway Timeout

505 表示不支持请求使用的 HTTP 主版本。506 是内容协商配置循环。WebDAV 相关的 507508 分别指存储不足和循环检测。511 Network Authentication Required 多见于酒店、机场 Wi-Fi 这类网络接入认证,不是源站登录。

常见非标准码要当作平台约定

真实系统里经常看到 419440444494499、Cloudflare 的 520530,以及 598599。它们可能很有运维价值,但不是通用 IANA 标准语义。跨平台协议设计不应依赖这些码,文档里也要写清楚它们来自框架、代理、网关还是云厂商。

最容易混淆的几组

  • 200 / 201 / 202 / 204:同步完成用 200,创建资源用 201,异步接收用 202,成功但无正文用 204。
  • 301 / 302 / 303 / 307 / 308:关注永久性和跳转后是否保持方法。必须保留 POST 时优先考虑 307 或 308。
  • 400 / 409 / 422:格式错是 400,资源状态冲突是 409,语义合法但业务无法处理是 422。
  • 401 / 403:未认证是 401,认证后仍无权是 403。
  • 404 / 410:找不到是 404,确认永久删除是 410。
  • 408 / 504:408 是服务器等客户端请求超时,504 是网关等上游响应超时。
  • 429 / 503:429 是某个客户端请求太多,503 是服务整体暂时不可用。

API 设计建议

不要所有接口都返回 200,再把失败塞进 JSON 的 code 字段。HTTP 状态码应表达协议层结果,业务细节放到响应正文。错误响应可以参考 RFC 9457 的 application/problem+json:提供 typetitlestatusdetailinstance,既方便机器处理,也不会暴露内部堆栈。

生产环境的 500 不应返回 SQL、文件路径、类名和完整堆栈,而应返回可追踪的请求 ID。自动重试也要谨慎:GETHEAD 这类幂等请求更适合重试,POST 重试前应有幂等键或业务幂等保证。

参考基准

本文按 IANA HTTP Status Code Registry、RFC 9110、RFC 6585、RFC 4918 和 RFC 9457 的语义整理。状态码登记可能继续变化,正式实现前应核对 IANA 最新注册表。