HTTP 状态码大全
每个 HTTP 响应都以一个三位数的状态码开头,告诉客户端请求的处理结果。以下按类别列出各个状态码,用通俗易懂的语言解释其含义,附响应示例,并说明每个状态码对重定向和 SEO 的影响。
1xx 信息响应
服务器已收到请求,正在继续处理。这类临时响应在最终响应之前返回,永远不会成为重定向链的终点。
2xx 成功
请求已被成功接收、理解并接受。正常的重定向链会以其中某个状态码结束,通常是 200 OK。
- 200
OK
请求成功;对于 GET 请求,响应体中就是所请求的资源。每条重定向链都应该以返回 200 的 URL 结束。 - 201
已创建
请求成功并创建了新资源,通常出现在 POST 或 PUT 之后。如果带有 Location 响应头,它指向新创建的资源。 - 202
已接受
请求已被接受处理,但尚未完成。用于异步任务,最终结果并无保证。 - 203
非权威信息
请求成功,但响应经过了转换代理的修改,因此内容与源服务器发送的并不完全相同。 - 204
无内容
请求成功,但没有内容需要返回。浏览器会停留在当前页面;常用于 DELETE、信标请求和 CORS 预检。 - 205
重置内容
请求成功,客户端应重置文档视图,例如清空刚刚提交的表单。 - 206
部分内容
服务器只发送客户端通过 Range 请求头所请求的字节范围,用于视频流播放和断点续传。 - 207
多状态
WebDAV 响应,在 XML multistatus 响应体中分别为多个资源或属性给出各自的状态码。 - 208
已报告
用在 WebDAV 207 响应内部,表示该集合的成员此前已经列出,避免绑定形成循环时无休止地重复列出。 - 226
IM Used
服务器使用增量编码(RFC 3229)响应 GET 请求:响应体只包含相对于客户端已有版本的变更。
3xx 重定向
客户端需要进一步操作,通常是请求 Location 响应头中给出的 URL。重定向链正是由这类状态码组成的。
- 300
多种选择
资源有多种表示形式,客户端可以从中选择。即使带有 Location 响应头,浏览器也不会自动跟随 300。 - 301
永久移动
301 永久重定向:资源已永久迁移到 Location 响应头给出的新 URL,客户端和搜索引擎今后都应使用新 URL。 - 302
临时移动
302 临时重定向:资源暂时位于另一个 URL。客户端会跟随 Location 响应头,但今后应继续使用原始 URL。 - 303
查看其他位置
将客户端重定向到另一个必须用 GET 获取的 URL,通常用于在表单提交后显示结果页(Post/Redirect/Get 模式)。 - 304
未修改
对条件 GET 或 HEAD 请求的响应:客户端缓存的副本仍然有效,服务器不发送响应体,客户端直接复用缓存。 - 305
使用代理
已弃用。曾用于告诉客户端通过 Location 中给出的代理重新发送请求;出于安全原因,浏览器会忽略它。 - 306
未使用(Switch Proxy)
保留且未使用。306 曾被提议作为“Switch Proxy”,后来被放弃;不得使用该状态码,客户端会将其视为未知的 3xx 状态码。 - 307
临时重定向
307 临时重定向:必须用相同的方法和请求体向 Location 中的 URL 重新发送请求,而 302 可能会把 POST 改为 GET。 - 308
永久重定向
308 永久重定向:保留请求方法和请求体。与 301 一样,今后应使用新 URL,但 POST 永远不会变成 GET。
4xx 客户端错误
请求无法按原样完成:页面不存在、访问被拒绝,或者客户端发送的请求过多。
- 400
错误请求
400 Bad Request 错误:由于客户端错误(例如语法格式错误、URL 无效或 Cookie 过大),服务器不会处理该请求。 - 401
未授权
请求需要有效的身份验证。服务器必须发送 WWW-Authenticate 响应头,说明验证方式,例如 Basic 或 Bearer。 - 402
需要付款
HTTP 将其保留供将来使用。实际上,一些 API 和服务会在需要付款、额度或订阅时使用它。 - 403
禁止访问
403 Forbidden 错误:服务器理解了请求,但拒绝授权。与 401 不同,再次发送相同的凭据也无济于事。 - 404
未找到
404 Not Found 错误:服务器在该 URL 上没有任何内容,或不愿透露是否存在内容。它不说明资源是暂时还是永久不存在。 - 405
方法不允许
URL 存在,但不支持所用的 HTTP 方法,例如向静态页面发送 POST。Allow 响应头会列出支持的方法。 - 406
不可接受
服务器无法生成符合客户端 Accept 系列请求头(格式、语言、编码)的响应,也不愿发送默认版本。 - 407
需要代理身份验证
与 401 类似,但要求身份验证的是客户端与服务器之间的代理。Proxy-Authenticate 响应头会说明验证方式。 - 408
请求超时
服务器没有及时收到完整的请求,因此关闭了连接。客户端可以在新连接上重新发送请求。 - 409
冲突
请求与资源的当前状态冲突,例如编辑冲突、记录重复或版本不匹配。 - 410
已删除
资源已被有意删除,预计不会再恢复。这是比 404 Not Found 更明确的永久性信号。 - 411
需要内容长度
服务器拒绝带有请求体但没有 Content-Length 请求头的请求。客户端可以附上有效的 Content-Length 后重新发送。 - 412
前提条件失败
请求头中的某个条件(例如 If-Match 或 If-Unmodified-Since)不成立,因此服务器没有执行修改。 - 413
内容过大
请求体超出了服务器接受的大小,例如上传的文件过大。曾被称为“Payload Too Large”和“Request Entity Too Large”。 - 414
URI 过长
请求的 URL 超出了服务器愿意处理的长度,例如重定向循环不断往 URL 后面追加参数。 - 415
不支持的媒体类型
服务器拒绝请求体,因为不支持其格式(Content-Type)或内容编码(Content-Encoding)。 - 416
范围无法满足
请求中 Range 请求头指定的字节范围超出了文件范围,例如在已变化的文件末尾之后继续断点下载。 - 417
预期失败
服务器无法满足请求中 Expect 请求头的预期。实际上,这意味着不支持 Expect: 100-continue。 - 418
我是茶壶
源自 1998 年咖啡壶协议(RFC 2324)的愚人节玩笑。HTTP 将其保留为未使用,但有些网站会有意返回它。 - 421
错误定向的请求
请求到达了一台无法为该主机名提供响应的服务器,通常是因为 TLS SNI 不匹配或复用了 HTTP/2 连接。 - 422
无法处理的内容
请求格式正确,但内容在语义上无效,通常是 API 中的验证错误。曾名为“Unprocessable Entity”。 - 423
已锁定
WebDAV:资源已被锁定,暂时无法执行该方法。客户端需要提供锁令牌,或等待锁定解除。 - 424
依赖失败
WebDAV:该方法依赖的另一项操作失败,因此无法执行,例如 PROPPATCH 中的某一个属性修改失败。 - 425
为时过早
服务器不会处理以 TLS 早期数据(0-RTT)发送的请求,因为它可能被重放。客户端会在握手完成后重试。 - 426
需要升级
服务器拒绝通过当前协议处理请求,要求升级到 Upgrade 响应头中指明的协议。 - 428
需要前提条件
服务器要求请求必须是条件请求(If-Match),以防多个客户端编辑同一资源时出现更新丢失。 - 429
请求过多
429 Too Many Requests 错误:客户端在给定时间内发送的请求过多(速率限制)。Retry-After 响应头可能会说明需要等待多久才能重试。 - 431
请求头字段过大
服务器因请求头过大而拒绝请求,通常是因为浏览器发送的 Cookie 过多或过大。 - 444
无响应
nginx nginx 的非标准状态码:服务器不发送任何响应就直接关闭连接。客户端看到的是空响应,永远不会收到 444。 - 451
因法律原因不可用
由于法律要求(例如法院命令或政府封锁)而拒绝访问。名称取自雷·布拉德伯里的小说《华氏 451》。 - 499
客户端关闭请求
nginx nginx 的非标准状态码:客户端在服务器发送响应之前就关闭了连接时,nginx 会将其写入访问日志。
5xx 服务器错误
请求看似有效,服务器却未能完成处理。持续出现的 5xx 错误会把访客和爬虫一并挡在门外。
- 500
服务器内部错误
500 Internal Server Error 是通用的服务器端故障:服务器上出了问题,例如应用崩溃或配置文件损坏。 - 501
未实现
服务器不支持完成请求所需的功能,最典型的情况是无法识别请求所用的 HTTP 方法。 - 502
错误网关
502 Bad Gateway 错误:网关或代理从上游服务器收到了无效响应,例如 nginx 后面的应用崩溃了。 - 503
服务不可用
503 Service Unavailable 错误:服务器因过载或维护暂时无法处理请求。Retry-After 响应头可以说明何时重试。 - 504
网关超时
504 Gateway Timeout 错误:网关或代理没有及时从上游服务器收到响应,通常是因为应用太慢。 - 505
HTTP 版本不受支持
服务器不支持或拒绝支持请求所用的 HTTP 主版本。如今它更多是在提示请求行格式有误。 - 506
变体也在协商
透明内容协商(RFC 2295)中的服务器配置错误:所选的变体本身也需要协商,从而形成循环。 - 507
存储空间不足
WebDAV:服务器无法存储完成请求所需的数据,例如磁盘已满或用户配额已用完。 - 508
检测到循环
WebDAV:服务器发现绑定形成了无限循环,因此终止了 Depth: infinity 操作。与重定向循环无关。 - 510
未扩展
源自已过时的 HTTP 扩展框架(RFC 2774):请求缺少必需的扩展声明。已被列为历史文档,实际上已无人使用。 - 511
需要网络身份验证
网络(通常是 Wi-Fi 强制门户)要求先登录才能访问。由拦截流量的网络发送,而不是由源服务器发送。 - 520
Web 服务器返回未知错误
Cloudflare Cloudflare 专用状态码:源服务器返回了空的、未知的或意外的响应,例如在崩溃或连接被重置之后。 - 521
Web 服务器已宕机
Cloudflare Cloudflare 专用状态码:源服务器拒绝了 Cloudflare 的连接,通常是因为 Web 服务器已宕机或屏蔽了 Cloudflare。 - 522
连接超时
Cloudflare Cloudflare 专用状态码:Cloudflare 未能及时与源服务器完成 TCP 连接,或源服务器没有确认请求。 - 523
源服务器无法访问
Cloudflare Cloudflare 专用状态码:Cloudflare 完全无法访问源服务器,通常是因为路由问题或 DNS 中的源服务器 IP 地址错误。 - 524
发生超时
Cloudflare Cloudflare 专用状态码:Cloudflare 已连接到源服务器,但在读取超时(默认约 2 分钟)之前没有收到 HTTP 响应。 - 525
SSL 握手失败
Cloudflare Cloudflare 专用状态码:Cloudflare 与源服务器之间的 TLS 握手失败,例如源服务器没有有效的证书。 - 526
SSL 证书无效
Cloudflare Cloudflare 专用状态码:在“完全(严格)”模式下,Cloudflare 无法验证源服务器的证书,例如证书已过期、为自签名证书或签发给了其他域名。 - 530
Cloudflare 1xxx 错误
Cloudflare Cloudflare 专用状态码:与 Cloudflare 的 1xxx 错误一起返回,例如 1016(源服务器 DNS 错误)或 1033(Cloudflare Tunnel 错误)。
如何解读 HTTP 状态码
第一位数字表示响应的类别,后两位数字表示该类别下的具体含义。如果客户端不认识某个状态码,就会把它当作同类别的 x00 状态码处理,因此未知的 4xx 状态码会按 400 Bad Request 处理。
数字后面的原因短语(reason phrase),例如 Not Found 或 Moved Permanently,只是写给人看的说明。客户端只根据数字做出处理,而 HTTP/2 和 HTTP/3 根本不发送原因短语。
重定向状态码一览
- 301 Moved Permanently:永久重定向;浏览器可能会把 POST 改为 GET。迁移页面时的默认选择。
- 302 Found:临时重定向;请求方法可能会改变。许多框架默认使用它。
- 303 See Other:临时重定向;始终改用 GET 跟随。常用于表单提交之后。
- 307 Temporary Redirect:临时重定向;保留原请求方法和请求体。
- 308 Permanent Redirect:永久重定向;保留原请求方法和请求体。
- 304 Not Modified:并不是重定向到另一个 URL,而是告诉客户端它缓存的副本仍然有效。
阅读 HTTP 重定向状态码详解,了解每种状态码分别适用于什么场景。
URL 重定向检测
使用免费的 TrueURL 重定向检测工具,逐跳查看一个 URL 返回的每一个状态码。