技术知识文章集合TECHNICAL ARCHIVE · 457 DOCUMENTS

显示模式

登录
ARCHIVE DOCUMENTNET

HTTP 状态码汇总(常见)

所属馆藏
NET Protocol
文件格式
Markdown
原始路径
NET Protocol/06-HTTP状态码汇总(常见)
本文目录12 个章节
  1. 一、什么是 HTTP 状态码
  2. 二、7 种常见状态码速查
  3. 三、状态码 200:OK
  4. 四、状态码 301:永久重定向
  5. 五、状态码 302:临时重定向
  6. 六、状态码 304:Not Modified
  7. 七、状态码 403:Forbidden
  8. 八、状态码 404:Not Found
  9. 九、状态码 500:Internal Server Error
  10. 十、其他常见状态码
  11. 十一、状态码排查建议
  12. 参考资料

HTTP 状态码汇总(常见)

Category(分类): NET Protocol Status: 未知

本文保留原文“7 种常见状态码”的入门顺序,并结合 RFC 9110 和 IANA 注册表补充现代 HTTP 语义、缓存、重定向、认证和网关场景。

原文 PDF 资料:

HTTP 状态码汇总(常见)PDF

一、什么是 HTTP 状态码

HTTP 状态码是服务器、代理或网关在响应中返回的三位数字,用于表达当前请求的处理结果。状态码不能单独代表所有业务结果,还需要结合请求方法、响应首部、响应体以及实际处理日志判断。

状态码分为五类:

  • 1xx(100–199):信息响应,表示处理仍在继续;
  • 2xx(200–299):成功响应;
  • 3xx(300–399):重定向或缓存相关响应;
  • 4xx(400–499):当前服务器无法满足请求,通常涉及请求格式、认证、权限、资源状态或限流;
  • 5xx(500–599):服务器、代理或网关无法完成看起来有效的请求。

“4xx 是客户端问题、5xx 是服务器问题”只能作为排查起点,不能绝对化。例如 CDN、反向代理和网关也可能返回 4xx/5xx。

二、7 种常见状态码速查

状态码常见含义典型场景
200 OK请求成功GET 获取资源、POST 返回处理结果
301 Moved Permanently永久重定向域名迁移、HTTP 升级 HTTPS、URL 规范化
302 Found临时重定向临时跳转、登录后跳转
304 Not Modified缓存未变化条件 GET/HEAD 命中协商缓存
403 Forbidden服务器拒绝提供服务权限不足、访问策略禁止、隐藏资源存在性
404 Not Found没有找到目标资源URL 错误、资源不存在、故意隐藏资源
500 Internal Server Error服务器内部异常未处理异常、程序错误、配置或依赖故障

三、状态码 200:OK

200 OK 表示请求成功,但“成功”的具体含义由 HTTP 方法决定:

  • GET 通常返回目标资源的当前表示;
  • HEAD 返回类似 GET 的响应首部,但不能包含响应体;
  • POST 的响应可以返回处理结果、创建结果或其他资源表示;
  • PUT、PATCH、DELETE 的响应内容由接口语义决定。

因此,不能简单把 200 解释成“服务器找到了客户端请求的内容并返回了内容”。例如一个成功的 HEAD 请求可以返回 200,但没有响应体;成功的 DELETE 也可能返回 200、202 或 204。

200 状态码响应示意

示例:

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 18

{"ok":true}

200 只说明 HTTP 层请求成功,不代表业务操作一定符合用户预期。业务接口还应在响应体中提供明确的业务状态和错误信息。

四、状态码 301:永久重定向

301 Moved Permanently 表示目标资源已经永久移动到 Location 指定的 URI:

HTTP/1.1 301 Moved Permanently
Location: https://www.example.com/new-path

301 永久重定向示意

浏览器或其他用户代理收到 301 后,通常会根据 Location 发起后续请求。严格来说,服务器返回重定向响应,后续“跳转”由客户端或用户代理执行,并不是服务器直接替客户端打开另一个页面。

常见场景:

  • HTTP 网站迁移到 HTTPS;
  • 域名迁移;
  • URL 结构永久调整;
  • 统一尾部斜杠或大小写形式。

301 的注意事项

  • 301 表示永久语义,客户端、浏览器、搜索引擎和缓存可能长期记住它;
  • 是否缓存、缓存多久还取决于 Cache-ControlExpires 等规则,不能简单说浏览器一定永久缓存;
  • 历史客户端可能把 POST 重定向后的请求改成 GET;如果必须保持原方法和请求体,应考虑 308 Permanent Redirect
  • 配置错误的 301 可能形成重定向循环。

五、状态码 302:临时重定向

302 Found 表示当前请求暂时需要到另一个 URI 获取结果:

HTTP/1.1 302 Found
Location: https://www.example.com/login

302 临时重定向示意

302 适合临时跳转,例如:

  • 未登录用户暂时跳转到登录页;
  • 临时维护页;
  • 活动入口临时调整。

与 301 相比,客户端未来通常仍应使用原始 URI。实际客户端对 POST 的处理存在历史兼容差异,可能将后续请求改为 GET。如果需要明确保留方法和请求体:

  • 临时重定向使用 307 Temporary Redirect
  • 永久重定向使用 308 Permanent Redirect

301、302、307、308 对比

状态码重定向性质是否要求保留原方法和请求体
301永久历史客户端可能改 POST 为 GET
302临时历史客户端可能改 POST 为 GET
307临时要求保留
308永久要求保留

六、状态码 304:Not Modified

304 Not Modified 用于条件 GET 或 HEAD。客户端先前已经缓存过资源,再带上验证首部请求:

GET /app.js HTTP/1.1
Host: example.com
If-None-Match: "abc123"

如果服务端判断资源没有变化,则返回:

HTTP/1.1 304 Not Modified
ETag: "abc123"
Cache-Control: max-age=3600

304 协商缓存示意

304 的含义不是“服务器重新把资源成功返回了”,而是告诉客户端:之前缓存的表示仍然可以使用。304 通常不包含响应体,客户端将本地缓存和本次响应首部合并后继续使用缓存内容。

常见验证字段:

  • If-None-Match 对应服务端的 ETag
  • If-Modified-Since 对应服务端的 Last-Modified

如果资源已经变化,服务端通常返回 200 OK 和新的内容,而不是 304。304 主要用于 GET/HEAD,不应当当作所有请求的通用“缓存成功”状态。

七、状态码 403:Forbidden

403 Forbidden 表示服务器理解请求,但拒绝提供服务。常见原因包括:

  • 当前用户没有权限;
  • IP、地区、设备或来源被访问策略禁止;
  • 资源受到法律、组织或安全策略限制;
  • 服务端不希望透露目标资源是否存在。

403 禁止访问示意

403 不一定表示“服务器已经确认了用户身份”,也不一定只是 IP 被封。服务器可以对未认证用户返回 401,也可以在不希望泄露资源存在性时返回 403 或 404。

403401 的常见区别:

  • 401 Unauthorized:缺少有效认证凭据,通常需要认证,并应包含 WWW-Authenticate
  • 403 Forbidden:服务器理解请求,但拒绝执行,即使重新发送相同请求也不一定能解决。

403 响应不应泄露过多内部权限规则。API 可以在响应体中返回稳定的错误标识,但不要暴露敏感路径、内部 ACL 或数据库信息。

八、状态码 404:Not Found

404 Not Found 表示服务器没有找到目标资源,或者不愿透露该资源是否存在:

404 资源不存在示意

常见原因包括:

  • URL 拼写错误;
  • 路由不存在;
  • 资源 ID 不存在;
  • 资源已经删除;
  • 反向代理转发路径错误;
  • 服务端故意用 404 隐藏受保护资源。

404 不一定意味着服务器宕机,也不一定意味着域名无法访问。需要结合响应来自源站还是代理、请求路径、路由配置和服务端日志判断。

与 410 的区别通常是:

  • 404:当前没有找到,未来是否存在不确定;
  • 410 Gone:资源已经不存在,并且这种状态很可能是永久性的。

API 的 404 响应最好返回稳定的 JSON 错误格式,例如:

HTTP/1.1 404 Not Found
Content-Type: application/problem+json

{
  "type": "https://example.com/problems/not-found",
  "title": "Resource not found",
  "status": 404
}

九、状态码 500:Internal Server Error

500 Internal Server Error 表示服务端遇到未预期的内部错误,无法完成请求:

500 服务器内部错误示意

500 可能由以下原因造成:

  • 未处理的程序异常;
  • 数据库或缓存依赖故障;
  • 配置错误;
  • 资源耗尽;
  • 模板、序列化或反序列化失败;
  • 上游服务返回无法处理的数据。

500 是对客户端的通用错误表达,不应把堆栈、数据库地址、密钥或内部文件路径直接返回给用户。服务端应在日志和链路追踪中记录详细异常,并向客户端返回安全、稳定的错误结构。

500 与其他 5xx 的区别

  • 500:当前服务器自身发生未预期内部错误;
  • 502 Bad Gateway:网关或代理从上游收到无效响应;
  • 503 Service Unavailable:服务暂时无法处理请求,常见于过载、维护或依赖不可用;
  • 504 Gateway Timeout:网关等待上游响应超时;
  • 501 Not Implemented:服务器不支持完成请求所需的功能。

十、其他常见状态码

1xx 信息响应

  • 100 Continue:服务端暂未因请求首部拒绝请求,客户端可以继续发送请求体;
  • 101 Switching Protocols:HTTP/1.1 协议升级,例如经典 WebSocket 握手;
  • 103 Early Hints:最终响应前的提示,可配合 Link 进行预加载或预连接。

2xx 成功响应

  • 201 Created:请求成功并创建资源,通常可以配合 Location
  • 202 Accepted:已接受但尚未完成,不保证最终处理成功;
  • 203 Non-Authoritative Information:响应被转换代理修改;
  • 204 No Content:成功但无响应体;
  • 205 Reset Content:要求用户代理重置文档视图;
  • 206 Partial Content:满足 Range 请求;
  • 207 Multi-Status:WebDAV 多资源状态;
  • 422 Unprocessable Content:语法正确但语义无法处理,常见于 API 校验失败。

3xx 重定向和缓存

  • 300 Multiple Choices:存在多个可选表示;
  • 303 See Other:使用 GET 访问另一个 URI;
  • 305 Use Proxy:历史状态码,已废弃;
  • 306 Unused:保留但未使用;
  • 307 Temporary Redirect:临时重定向并保留方法;
  • 308 Permanent Redirect:永久重定向并保留方法。

4xx 请求错误

  • 400 Bad Request:请求语法、首部或 framing 无效;
  • 405 Method Not Allowed:资源不支持当前方法,响应应包含 Allow
  • 406 Not Acceptable:内容协商无法满足客户端偏好;
  • 407 Proxy Authentication Required:需要代理认证;
  • 408 Request Timeout:服务端等待完整请求超时;
  • 409 Conflict:请求与资源当前状态冲突;
  • 410 Gone:资源永久或很可能永久不可用;
  • 411 Length Required:服务端要求 Content-Length
  • 412 Precondition Failed:条件请求首部未满足;
  • 413 Content Too Large:请求内容过大,旧称 Payload Too Large;
  • 414 URI Too Long:请求目标 URI 过长;
  • 415 Unsupported Media Type:不支持请求内容类型;
  • 416 Range Not Satisfiable:Range 无法满足;
  • 417 Expectation Failed:无法满足 Expect
  • 418 Unused:茶壶是历史玩笑,当前注册表标记为未使用;
  • 421 Misdirected Request:请求到达了无法为目标 URI 提供权威响应的服务器;
  • 425 Too Early:拒绝可能被重放的 TLS 早期数据;
  • 428 Precondition Required:要求使用条件请求,避免丢失更新;
  • 429 Too Many Requests:触发限流;
  • 431 Request Header Fields Too Large:请求首部过大;
  • 451 Unavailable For Legal Reasons:因法律原因无法提供资源。

5xx 服务端、网关错误

  • 501 Not Implemented:服务器不支持必要功能;
  • 502 Bad Gateway:网关从上游得到无效响应;
  • 503 Service Unavailable:服务暂时不可用,可配合 Retry-After
  • 504 Gateway Timeout:网关等待上游超时;
  • 505 HTTP Version Not Supported:不支持请求中的 HTTP 版本;
  • 507 Insufficient Storage:WebDAV 无法存储完成请求所需的表示;
  • 508 Loop Detected:处理请求时检测到循环;
  • 511 Network Authentication Required:需要完成网络接入认证,例如强制门户认证。

十一、状态码排查建议

遇到状态码时,可以按以下顺序排查:

  1. 查看请求方法、URL、请求体和关键请求首部;
  2. 查看 LocationAllowWWW-AuthenticateRetry-AfterContent-RangeETag 等响应首部;
  3. 确认响应是源服务器、反向代理、CDN 还是网关生成的;
  4. 检查认证、授权、路由、缓存、限流和上游依赖;
  5. 对照服务端日志和链路追踪,不要只看浏览器错误页面;
  6. 对请求重试保持谨慎,GET 等幂等请求通常更适合自动重试,POST 是否可重试要结合幂等键和业务语义;
  7. 不要把 200 当成业务一定成功,也不要把 500 当成唯一的程序错误分类。

参考资料

457 DOCUMENTS · 10 COLLECTIONS
ARCHIVE SEARCH457 篇文章

SEARCH GUIDE

输入关键词开始搜索

支持搜索文章标题、所属分类和原始文档路径。

按分类浏览

10 COLLECTIONS