HTTP(超文本传输协议)是一种用于传输超文本的应用层协议。在进行HTTP通信时,服务器会向客户端返回一个状态码,用于表示请求的处理结果。
状态码由3位数字组成,使用第1个数字表示响应的类别,一共5种,分别使用 1~5 来表示,状态码的后两位则没有特殊的含义。HTTP 状态码的类别及说明如下表所示:
状态码类别 | 含义 | 描述 |
1xx | 信息性状态码 | 表示请求已被接收,继续处理 |
2xx | 成功状态码 | 表示请求已成功被服务器接收、理解和处理 |
3xx | 重定向状态码 | 表示需要进一步操作以完成请求 |
4xx | 客户端错误状态码 | 表示客户端发送的请求有错误 |
5xx | 服务器错误状态码 | 表示服务器在处理请求时发生了错误 |
下面来详细介绍一下 HTTP 中的状态码,与君共勉 ❤🧡💛💚💙💜
1. 消息:1xx
1xx 类型的状态码代表客户端的请求已被服务器接受,但还需要继续处理。这类响应是临时响应,只包含响应行和某些可选的响应头信息,并以空行结束。由于 HTTP/1.0 协议中没有定义 1xx 这一类型的状态码,所以除非在特定的条件下,否则服务器不会向客户端发送 1xx 类型的响应。
状态码 | 中文名称 | 英文名称 | 描述 |
100 | 继续 | Continue | 服务器已经接收到请求的一部分,客户端可以继续发送剩余的请求 |
101 | 切换协议 | Switching Protocols | 服务端已经根据客户端的请求切换了协议版本,注意:只能向更高级的协议版本切换,例如,切换到 HTTP 的新版本协议 |
102 | 处理中 | Processing | 服务端已收到并且正在处理这个请求,但暂无响应 |
103 | 早期提示 | Early Hints | 允许服务端在主响应头之前先发送部分响应头,以达到预加载文件的目的 |
2. 成功:2xx
2xx 类型的状态码代表客户端的请求已成功被服务端接收,并成功处理了这个请求
状态码 | 中文名称 | 英文名称 | 描述 |
200 | 成功 | OK | 请求已成功处理,并返回所请求的资源 |
201 | 已创建 | Created | 请求已成功处理,并在服务器上创建了新的资源 |
202 | 已接受 | Accepted | 该请求正在进行处理,但尚未处理完成 |
203 | 非授权信息 | Non-Authoritative Information | 请求成功。但返回的 meta 信息不在原始的服务器,而是一个副本 |
204 | 无内容 | No Content | 服务器成功处理了请求,但没有返回任何内容 |
205 | 重置内容 | Reset Content | 请求成功,但没有返回任何响应体。与状态码 204 不同的是,此状态码告诉客户端应立即重置发送此请求的文档视图。比如在用户提交表单后,立即重置表单,以便用再次输入 |
206 | 部分内容 | Partial Content | 服务端成功处理了部分 GET 请求,像迅雷这类的 HTTP 下载工具就是使用此类响应实现断点续传或者分段下载的 |
207 | 多个状态 | Multi-Status | 由 WebDAV(RFC 2518) 扩展的状态码,代表之后的响应体将是一个 XML 消息,并且可能依照之前子请求数量的不同,包含一系列独立的响应代码 |
208 | 已报告 | Already Reported | 已报告(webDAV) |
226 | 已完成响应 | IM Used | 已完成响应 |
3. 重定向:3xx
3xx 类型的状态码代表需要客户端采取进一步的操作才能完成请求。通常这些状态码用来重定向,后续的请求地址(重定向目标)在本次响应的 Location 域中指明。
当且仅当后续的请求所使用的方法是 GET 或者 HEAD 时,用户浏览器才可以在没有用户介入的情况下自动提交所需要的后续请求。客户端应当自动监测并避免无限循环的重定向(例如:A->A,或者 A->B->C->A),因为这会导致服务器和客户端资源的消耗。按照 HTTP/1.0 版协议的规范,浏览器重定向的次数不得超过 5 次。
状态码 | 中文名称 | 英文名称 | 描述 |
300 | 多种选择 | Multiple Choices | 请求有多种可能的响应,客户端需要选择其中的一个进行重定向 |
301 | 永久重定向 | Moved Permanently | 请求的资源已经被永久移动到新的URL |
302 | 临时重定向 | Found | 请求的资源暂时被移动到新的URL |
303 | 查看其他位置 | See Other | 对当前请求的响应可以在另一个 URL 上找到,而且客户端应当采用 GET 的方式访问那个资源 |
304 | 未修改 | Not Modified | 所请求的资源(自上次访问)并没有改变时,服务器会返回此状态码,但响应中不会包含响应体,因此客户端可以使用上次请求缓存的资源 |
305 | 使用代理 | Use Proxy | 所请求的资源必须通过指定的代理才能访问 |
306 | 切换代理 | Switch Proxy | 在最新版的规范中,该状态码已经被弃用 |
307 | 临时重定向 | Temporary Redirect | 与 302 类似,表示所请求的资源需要临时从不同的 URL 响应 |
308 | 永久重定向 | Permanent Redirect | 已为目标资源分配了一个新的永久 URL,以后对该资源的任何引用都应使用其中一个 URL。 类似于 301,不同之处在于它不允许将请求方法从 POST 更改为 GET |
4. 请求错误:4xx
4xx 类型的状态码代表了客户端可能发生了错误,导致服务器无法完成响应,服务器就会返回一个解释当前错误状况的响应体。这一类状态码适用于任何请求方法(HEAD 请求除外),客户端(浏览器)会自动显示出响应中的响应体,也就是我们常说的错误信息。
状态码 | 中文名称 | 英文名称 | 描述 |
400 | 错误请求 | Bad Request | 服务器无法理解请求的语法 |
401 | 未授权 | Unauthorized | 请求需要身份验证 |
401.1 | 表示登录失败 | ||
401.2 | 表示服务器配置导致登录失败 | ||
401.3 | 表示由于 ACL 对资源的限制而未获得授权 | ||
401.4 | 表示筛选器授权失败 | ||
401.5 | 表示ISAPI/CGI 应用程序授权失败 | ||
401.7 | 表示访问被 Web 服务器上的 URL 授权策略拒绝。这个错误代码为 IIS 6.0 所专用 | ||
402 | 所需付款 | Payment Required | 该状态码是为了将来可能的需求而预留的 |
403 | 禁止 | Forbidden | 服务器拒绝请求访问 |
403.1 | 表示执行访问被禁止 | ||
403.2 | 表示读访问被禁止 | ||
403.3 | 表示写访问被禁止 | ||
403.4 | 表示要求 SSL | ||
403.5 | 表示要求 SSL 128 | ||
403.6 | 表示IP 地址被拒绝 | ||
403.7 | 表示要求客户端证书 | ||
403.8 | 表示站点访问被拒绝 | ||
403.9 | 表示用户数过多 | ||
403.10 | 表示配置无效 | ||
403.11 | 表示密码更改 | ||
403.12 | 表示拒绝访问映射表 | ||
403.13 | 表示客户端证书被吊销 | ||
403.14 | 表示拒绝目录列表 | ||
403.15 | 表示超出客户端访问许可 | ||
403.16 | 表示客户端证书不受信任或无效 | ||
403.17 | 表示客户端证书已过期或尚未生效 | ||
403.18 | 表示在当前的应用程序池中不能执行所请求的 URL。这个错误代码为 IIS 6.0 所专用 | ||
403.19 | 表示不能为这个应用程序池中的客户端执行 CGI。这个错误代码为 IIS 6.0 所专用 | ||
403.20 | 表示Passport 登录失败。这个错误代码为 IIS 6.0 所专用 | ||
404 | 未找到 | Not Found | 服务器找不到请求的资源 |
404.1 | 表示无法在所请求的端口上访问 Web 站点 | ||
404.2 | 表示Web 服务扩展锁定策略阻止本请求 | ||
404.3 | 表示MIME 映射策略阻止本请求 | ||
405 | 方法禁用 | Method Not Allowed | 客户端请求行中使用的请求方法被服务器禁用 |
406 | 不接受 | Not Acceptable | 服务端响应的资源类型与客户端请求头中要求的资源类型不符,客户端无法解析,简单来讲就是,服务器返回的数据客户端解析不了 |
407 | 需要代理授权 | Proxy Authentication Required | 与 401 响应类似,只不过客户端必须在代理服务器上进行身份验证 |
408 | 请求超时 | Request Time-out | 请求超时,服务器无法在规定时间内对客户端进行响应 |
409 | 冲突 | Conflict | 由于客户端请求中要执行的操作与服务器中被请求资源的当前状态存在冲突,导致请求无法完成,通常发生在 PUT 请求中 |
410 | 已删除 | Gone | 客户端请求的资源已经不存在,不同于 404,当资源以前有,但现在被永久删除的情况下可以使用 410 状态码 |
411 | 需要有效长度 | Length Required | 服务器无法处理客户端发送的不带 Content-Length 的请求信息 |
412 | 未满足前提条件 | Precondition Failed | 服务器在验证客户端请求头中的字段时,有一个或多个不能满足 |
413 | 请求实体过大 | Request Entity Too Large | 客户端请求中,提交的数据大小超过了服务器允许的范围,服务器拒绝处理当前请求 |
414 | 请求的 URI 过长 | Request-URI Too Large | 请求的 URI 长度超过了服务器能够处理的长度,因此服务器拒绝处理该请求 |
415 | 不支持的媒体类型 | Unsupported Media Type | 服务器无法处理客户端请求中附带的媒体格式 |
416 | 请求范围不符合要求 | Requested range not satisfiable | 如果请求中包含了 Range 头部字段,并且 Range 中指定的数据范围与当前资源的可用范围不符,同时请求中又没有定义 If-Range 头部字段,那么服务器就会返回 416 状态码 |
417 | 未满足期望值 | Expectation Failed | 服务器无法满足请求头中 Expect 头部字段的信息 |
418 | 我是一个茶壶 | I’m a teapot | 状态码 418 是 IETF 在 1998 年愚人节发布的一个玩笑 RFC |
419 | 认证超时 | Authentication Time-out | 并不是HTTP标注的一部分,419认证超时表示以前的有效证明已经失效了。同时也被用于401未认证的替代选择为了从其它被拒绝访问的已认证客户端中指定服务器的资源 |
420 | 提高你的耐心 | Enhance Your Caim | Twitter Search与Trends API在客户端被限速的情况下返回 |
421 | 请求太多 | too many connections | 从当前客户端所在的IP地址到服务器的连接数超过了服务器许可的最大范围。通常,这里的IP地址指的是从服务器上看到的客户端地址(比如用户的网关或者代理服务器地址)。在这种情况下,连接数的计算可能涉及到不止一个终端用户。 |
422 | 网络错误实体 | Unprocessable Entity | 请求格式正确,但是由于含有语义错误,所以服务器无法响应,一般是http headers有问题 |
423 | 被锁定 | Locked | 当前资源被锁定 |
424 | 依赖失败 | Failed Dependency | 由于之前的某个请求发生的错误,导致当前请求失败 |
425 | 太早 | Too Early | 该请求可能会被“重放”,从而造成潜在的重放攻击,服务器不愿冒险,所以拒绝处理该请求 |
426 | 需要升级 | Upgrade Required | 器拒绝使用当前协议执行请求,但可能在客户机升级到其他协议后愿意这样做。 服务器在 426 响应中发送 Upgrade 头以指示所需的协议议,客户端应当切换到TLS/1.0,并在HTTP/1.1 Upgrade header中给出 |
428 | 需要前置条件 | Precondition Required | 原始服务器需要有条件的请求。当客户端GET一个资源的状态的时候,同时又PUT回给服务器,与此同时第三方修改状态到服务器上的时候,为了避免丢失更新的问题发生将会导致冲突 |
429 | 过多请求 | Too Many Requests | 用户已经发送了太多的请求在指定的时间里。用于限制速率 |
431 | 请求头部字段太大 | Request Header Fields Too Large | 服务器由于一个单独的请求头部字段或者是全部的字段太大而不愿意处理请求 |
444 | 无响应 | Connection Closed Without Response | 被使用在Nginx的日志中表明服务器没有返回信息给客户端并且关闭了连接(在威慑恶意软件的时候比较有用) |
449 | 重试 | Retry With | 由微软扩展,代表请求应当在执行完某些操作后进行重试 |
450 | 被Windows家长控制阻塞 | Blocked by Windows Parental Controls | 一个微软的扩展。这个错误是当Windows家长控制打开并且阻塞指定网页的访问的时候被指定 |
451 | 由于法律原因而无效 | Unavailable For Legal Reasons | 被定义在因特网草稿“一个新的HTTP状态码用于法律限制的资源”。被用于当资源的访问由于法律原因被禁止的时候。例如检查制度或者是政府强制要求禁止访问。一个例子是1953年dystopian的小说Fahrenheit 451就是一个非法的资源 |
494 | 请求头太大(Nginx) | Request Header Too Large(Nginx) | Nginx内置代码和431类似,但是是被更早地引入在版本0.9.4(在2011年1月21日) |
495 | 证书错误(Nginx) | Certificate Error(Nginx) | Nginx内置的代码,当使用SSL客户端证书的时候错误会出现为了在日志错误中区分它和4XX和一个错误页面的重定向 |
496 | 没有证书(Nginx) | No Certificate(Nginx) | Nginx内置的代码,当客户端不能提供证书在日志中分辨4XX和一个错误页面的重定向 |
497 | HTTP到HTTPS(Nginx) | http to https(Nginx) | Nginx内置的代码,被用于原始的HTTP的请求发送给HTTPS端口去分辨4XX在日志中和一个错误页面的重定向 |
498 | 令牌超时或失效(Esri) | Token Required (Esri) | 由ArcGIS for Server返回。这个代码意味着令牌的超时或者是失效 |
499 | 客户端主动关闭了连接 | client has closed connection | 由 nginx 引入的非标准状态代码,用于在 nginx 处理请求时客户端关闭连接的情况,因为服务器端处理的时间过长,客户端“不耐烦”了 |
5. 服务器错误:5xx
5xx 类型的状态码代表了服务器在处理请求的过程中出现错误或者发生异常(这些错误或异常是服务器本身造成的,与请求无关),也有可能是服务器意识到以当前的软硬件资源无法完成对请求的处理,此时服务器会在响应体中返回一个描述当前错误的解释信息,客户端会直接向用户展示这个响应体。5xx 类型的状态码适用于任何 HTTP 方法。
状态码 | 中文名称 | 英文名称 | 描述 |
500 | 服务器内部错误 | Internal Server Error | 服务器内部错误,无法完成请求 |
500.12 | 表示应用程序正忙于在 Web 服务器上重新启动 | ||
500.13 | 表示Web 服务器太忙 | ||
500.15 | 表示不允许直接请求 Global.asa | ||
500.16 | 表示UNC 授权凭据不正确。这个错误代码为 IIS 6.0 所专用 | ||
500.18 | 表示URL 授权存储不能打开。这个错误代码为 IIS 6.0 所专用 | ||
500.100 | 表示内部 ASP 错误 | ||
501 | 尚未实施 | Not Implemented | 表示页眉值指定了未实现的配置,在参数中有语法错误 |
502 | 错误网关 | Bad Gateway | 网关或者代理服务器在尝试执行请求时,从上游服务器接收到了一个无效的响应 |
503 | 服务不可用 | Service Unavailable | 由于服务器维护或者过载,导致当前请求无法处理 |
504 | 网关超时 | Gateway Time-out | 充当网关或代理服务器时,未能及时收到远程服务器的响应 |
505 | HTTP 版本不受支持 | HTTP Version not supported | 服务器不支持请求中 HTTP 协议的版本,无法完成处理 |
506 | 变体也协商 | Variant Also Negotiates | 服务器存在内部配置错误:被请求的协商变元资源被配置为在透明内容协商中使用自己,,因此在一个协商处理中不是一个合适的重点 |
507 | 存储不足 | Insufficient Storage | 表示服务器无法存储完成请求所必须的内容。这个状况被认为是临时的。WebDAV (RFC 4918) |
508 | 发现环路 | Loop Detected | 服务器发现了一个无限的循环档处理请求的时候 |
509 | 超过带宽限制 | Bandwidth Limit Exceeded | 服务器达到带宽限制 |
510 | 未扩展 | Not Extended | 不能满足获取资源所需要的要求,还需要进一步扩展 |
511 | 需要网络身份验证 | Network Authentication Required | 客户端需要授权去火的网络的访问权限。一般用于代理交互中被用来进行网络的访问控制(例如连接WiFi热点时的强制网络门户) |
520 | 未知错误 | Unknown Error | 这个状态码也没有被指定在任何RFC中,并且只会被一些服务器返回,例如微软的Azure和CloudFlare服务器:”520错误。本质上是一个捕获全部的响应当原始服务器返回一些未知的或者一些不能被忍受或者被解释的(协议违反或者空响应)” |
530 | 表示未登录 | ||
532 | 表示存储文件需要帐户 | ||
550 | 表示未执行请求的操作。文件不可用(例如,未找到文件,没有访问权限) | ||
551 | 表示请求的操作异常终止:未知的页面类型 | ||
552 | 表示请求的文件操作异常终止:超出存储分配(对于当前目录或数据集) | ||
553 | 表示未执行请求的操作。不允许的文件名 | ||
598 | 网络读取超时异常(未知) | Nextwork ReadTimeout Exception (Unknown) | 这个状态码也没有在任何RFC中指定,但是被用在微软的HTTP代理中去标注一个网络读取超时在一个客户端之前的代理的后面 |
599 | 网络连接超时异常(未知) | Nextwork Connect Timeout Exception (Unknown) | 这个状态码也没有在任何RFC中指定,但是被用在微软的HTTP代理中去标注一个网络连接超时在一个客户端之前的代理的后面 |
6. 服务器错误:6xx
状态码 | 中文名称 | 英文名称 | 描述 |
600 | Unparseable Response Headers | 源站没有返回响应头部,只返回实体内容 |