所有文章
· URLCheck

HTTP 状态码大全:从 200 到 503 完整解读

HTTP 状态码完整指南,涵盖 1xx-5xx 所有常见状态码的含义、使用场景和排查方法。

HTTP 状态码 Web开发

HTTP 状态码是服务器对客户端请求的响应代码,分为 5 大类。

状态码描述的是本次 HTTP 请求的处理结果。它不等同于页面视觉效果:一个精美错误页仍应返回 404,一个正文为空的成功请求也可能正确返回 204。开发、监控和 SEO 排查都应先读取状态码,再结合响应头与正文判断。

1xx 信息响应

1xx 表示服务器已经收到请求,连接仍在继续处理。普通网页开发中不常直接看到,但在代理、上传和协议升级场景十分重要。

  • 100 Continue:客户端可以继续发送请求体
  • 101 Switching Protocols:切换协议,例如 WebSocket 握手
  • 103 Early Hints:在最终响应前提示客户端预加载资源

中间代理若不理解这些响应,可能导致上传中断、连接异常或预加载无效。排查时应确认客户端、CDN 与源站对协议特性的支持一致。

2xx 成功

  • 200 OK - 请求成功
  • 201 Created - 资源创建成功
  • 204 No Content - 成功但无返回内容
  • 202 Accepted - 请求已接收,但任务仍在异步处理
  • 206 Partial Content - 返回资源的一部分,常见于视频和断点续传

200、201、202、204 的区别

状态码适用场景响应要求
200查询或同步操作完成通常包含结果正文
201新资源已创建建议通过 Location 指出资源地址
202已进入异步队列应提供任务状态查询方式
204操作成功但无需正文响应不应包含消息体

API 不应为了“统一前端处理”而把所有结果都包装成 200。创建、异步任务和无正文成功使用准确状态码,可以让客户端、网关与监控系统更可靠地处理请求。

3xx 重定向

  • 301 Moved Permanently - 永久重定向
  • 302 Found - 临时重定向
  • 304 Not Modified - 使用缓存
  • 303 See Other - 引导客户端使用 GET 查看另一个资源
  • 307 Temporary Redirect - 临时跳转并保留请求方法
  • 308 Permanent Redirect - 永久跳转并保留请求方法

304 不是普通页面跳转,它只用于条件请求。客户端发送 If-None-MatchIf-Modified-Since 后,服务器用 304 表示缓存副本仍可使用,因此响应通常没有完整正文。

4xx 客户端错误

  • 400 Bad Request - 请求格式错误
  • 401 Unauthorized - 未认证
  • 403 Forbidden - 无权限
  • 404 Not Found - 资源不存在
  • 429 Too Many Requests - 请求过于频繁
  • 405 Method Not Allowed - 路径存在,但请求方法不允许
  • 408 Request Timeout - 服务端等待请求超时
  • 409 Conflict - 请求与资源当前状态冲突
  • 410 Gone - 资源已明确永久删除
  • 422 Unprocessable Content - 语法有效,但业务校验失败
  • 451 Unavailable For Legal Reasons - 因法律原因不可用

401 与 403 不一样

401 表示客户端尚未提供有效认证信息,通常应附带 WWW-Authenticate。403 表示服务器理解请求,但拒绝当前主体访问。把所有权限问题都返回 403,会让客户端无法判断应该重新登录还是停止重试。

404、410 与软 404

404 适合“不存在或不愿透露是否存在”的资源;410 明确表示资源已经永久移除。软 404 则是页面显示“内容不存在”,HTTP 却返回 200。软 404 会污染可用性监控、缓存和搜索索引,应尽量避免。

5xx 服务器错误

  • 500 Internal Server Error - 服务器内部错误
  • 502 Bad Gateway - 网关错误
  • 503 Service Unavailable - 服务不可用
  • 501 Not Implemented - 服务器不支持请求所需能力
  • 504 Gateway Timeout - 网关等待上游响应超时

500、502、503、504 如何区分?

状态码错误位置常见原因
500当前应用未捕获异常、配置错误、代码缺陷
502网关收到无效上游响应进程退出、协议错误、连接被重置
503服务主动不可用维护、过载、熔断、无健康实例
504网关等待上游超时慢查询、依赖超时、网络阻塞

客户端重试策略也应不同。对明确的业务 4xx 不应盲目重试;对 503、504 等临时错误,可以采用有限次数、指数退避并加入随机抖动,避免故障期间形成重试风暴。

会影响 SEO 的状态码

  • 301/308 表示永久迁移,应直接跳转到首选 URL。
  • 302/307 适合临时迁移,原 URL 通常仍是首选地址。
  • 404 表示资源不存在;410 更明确地表示资源已被主动删除。
  • 429 表示请求过多,条件允许时应同时返回 Retry-After
  • 长期出现 5xx 会让搜索引擎降低抓取频率。

重定向状态码的选择和方法保留差异,可继续阅读301、302、307、308 对比指南

响应头如何帮助定位状态码问题?

状态码只是入口,响应头能解释请求经过了哪些系统以及客户端下一步应该做什么。

响应头排查价值
Location3xx 的下一跳目标
Retry-After429、503 后建议等待时间
WWW-Authenticate401 所需认证方案
Allow405 路径允许的方法
Cache-Control错误或跳转是否会被缓存
ETag / Last-Modified条件请求与 304 验证
Via / CDN headers响应经过的代理与缓存层
Content-Type正文格式是否符合客户端预期

例如一个错误的 404 被 CDN 缓存,源站即使已经恢复,用户仍可能持续看到旧响应。此时只检查应用日志会得出“源站正常”的错误结论,还需要确认缓存命中和 TTL。

实用排查流程

  1. 检查初始响应和每一跳,而不只是最终页面。
  2. 对比浏览器与爬虫 User-Agent,排查针对机器人的异常响应。
  3. 检查 Location、缓存、认证和 CDN 响应头。
  4. 确认最终 URL 返回预期状态与正文。
  5. 修改源站或 CDN 规则后,从公网重新测试。

建立状态码监控体系

建议按路由模板、地区、上游服务和发布版本统计状态码,而不是只看全站汇总。

核心指标包括:

  • 2xx 成功率与关键接口成功率
  • 3xx 比例、平均跳数和异常目标域名
  • 404 Top URL 与来源页面
  • 429 触发量、受影响用户和重试行为
  • 5xx 比例、持续时间与上游依赖
  • P50、P95、P99 响应时间
  • CDN 命中与源站状态码差异

告警阈值应结合业务流量设置。低流量接口出现一个 500 可能就是 100% 失败;高流量站点则需要同时关注错误比例、绝对数量和持续窗口。

发布后可以把新增 404、5xx 和重定向变化与版本号关联。这样不仅能发现故障,还能快速判断是哪次配置或部署引入了问题。

运行多身份 URL 检查,可在一份结果中查看状态码、响应头、耗时和完整跳转路径。

常见问题

所有 3xx 都是错误吗?

不是。跳转是 Web 的正常机制。只有目标错误、链路过长或形成循环时才需要修复。

页面不存在时可以返回 200 吗?

不建议。显示错误文案却返回 200 会形成“软 404”,让搜索引擎和监控工具误判。应返回真实的 404 或 410,同时保留友好的错误页面。

429 和 503 应该返回多久后重试?

服务端可以用 Retry-After 给出秒数或日期。客户端仍应设置最大重试次数、总超时和随机抖动;不能因为服务端建议重试,就无限循环请求。

API 校验失败应该用 400 还是 422?

团队需要保持一致。常见做法是:JSON 无法解析、字段类型错误等请求格式问题返回 400;格式正确但违反业务规则时返回 422。无论选择哪种,都应提供稳定的错误码和可定位字段,而不是只返回模糊文本。

HTTP 状态码语义的权威定义可参考 RFC 9110

使用 URLCheck 工具可以快速检查任意 URL 的状态码,并查看完整的响应头信息。