HTTP状态码
状态码 | 类别 | 原因短语 |
---|---|---|
1xx | Infomational(信息性状态码) | 接收的请求正在处理 |
2xx | Success(成功状态码) | 请求正常处理完毕 |
3xx | Redirection(重定向状态码) | 需要进行附加操作以完成请求 |
4xx | Client Error(客户端错误状态码) | 服务器无法处理请求 |
5xx | Server Error(服务器错误状态码) | 服务器处理请求出错 |
建议
由于 HTTP 的状态码实在是太多了,而且大部分都是不常用的,所以这里推荐一些重要的状态码去详记,其他的了解即可。
- 200、202、204、206
- 301、302、304、307
- 401、403、404
- 500、501、502、503、504
1xx
-
100:Continue
表示目前为止一切正常**,客户端应该继续请求**,如果已完成请求则忽略。
为了让服务器检查请求的首部,客户端必须在发送请求实体前,在初始化请求中发送
Expect: 100-continue
首部并接收100 Continue
响应状态码。 -
101:Switching Protocol(协议交换)
表示服务器应客户端升级协议的请求(请求头)正在切换协议。
-
102:Processing (WebDAV)
表示服务器已接收到完整请求,并正在处理该请求,此时还没有响应。
只有当服务器期望请求花费大量时间时,才会发送此状态代码。
-
103:Early Hints
一般和
Link
header(首部)一起使用,来允许用户在服务器还在准备响应数据的时候预加载一些资源。
2xx
-
200:OK
请求成功。默认情况下状态码为 200 的响应可以被缓存。
不同请求方式对于请求成功的意义如下:
PUT
和DELETE
的请求成功通常并不是响应200 OK
的状态码而是204 No Content
表示无内容(或者201 Created
表示一个资源首次被创建成功)。 -
201:Created
表示请求已经被成功处理,并且创建了新的资源。
新的资源在应答返回之前已经被创建。同时新增的资源会在应答消息体中返回,其地址或者是原始请求的路径,或者是
Location
首部的值。常规使用场景是作为 POST 请求的返回值。
-
202:Accepted
表示服务器端已经收到请求消息,但是尚未进行处理。
但是对于请求的处理却是无保证的,即稍后无法通过 HTTP 协议给客户端发送一个异步请求来告知其请求的处理结果。这个状态码被设计用来将请求交由另外一个进程或者服务器来进行处理,或者是对请求进行批处理的情形。
-
203:Non-Authoritative Information
表示请求已经成功被响应。
但是获得的负载与源头服务器的状态码为
200 OK
的响应相比,经过了拥有转换功能的 proxy(代理服务器)的修改。 -
204:No Content
表示该请求已经成功了,但是客户端客户不需要离开当前页面。
默认情况下 204 响应是可缓存的。一个
ETag
标头包含在此类响应中。使用惯例:
- 在 PUT 请求中进行资源更新,但是不需要改变当前展示给用户的页面,那么返回
204 No Content
- 如果创建了资源,则返回
201 Created
- 如果应将页面更改为新更新的页面,则应改用
200 OK
- 在 PUT 请求中进行资源更新,但是不需要改变当前展示给用户的页面,那么返回
-
205:Reset Content
通知客户端重置文档视图,比如清空表单内容、重置 canvas 状态或者刷新用户界面。
-
206:Partial Content
表示请求已成功,并且主体包含所请求的数据区间,该数据区间是在请求的
Range
首部指定的。- 如果只包含一个数据区间,那么整个响应的
Content-Type
首部的值为所请求的文件的类型,同时包含Content-Range
首部 - 如果包含多个数据区间,那么整个响应的
Content-Type
首部的值为multipart/byteranges
,其中一个片段对应一个数据区间,并提供Content-Range
和Content-Type
描述信息
- 如果只包含一个数据区间,那么整个响应的
-
207:Multi-Status
指示可能存在响应的混合。
响应主体是具有多状态根元素的
text/xml
或application/xml
HTTP实体。XML 正文将列出所有单独的响应代码。 -
208:Already Reported
在 207(207多状态)响应中使用 208 已报告响应代码以节省空间并避免冲突。如果使用不同的路径多次请求相同的资源(例如,作为集合的一部分),则只有第一个资源报告为 200。所有其他绑定的响应都将使用此 208 状态代码进行报告,因此不会创建冲突,并且响应时间更短。
-
226:IM Used
在 delta 编码的上下文中,
226 IM Used
状态码由服务器设置,以指示其正在向其接收到的 GET 请求返回 delta。使用 delta 编码,服务器对 GET 请求的响应相对于给定的基础文档(而不是当前文档)存在差异(称为 delta)。
客户端使用
A-IM:HTTP
头来指示要使用哪种差异算法,使用If None-Match:
头来提示服务器它得到的上一个版本。服务器生成一个 delta,以 HTTP 响应的形式将其发送回 226 状态代码,并包含
IM:(使用的算法名称)
和delta-Base:(ETag 与与 delta 相关联的基本文档匹配)
HTTP 标头。IM代表例如操作,该术语用于描述生成增量的算法。
3xx
-
300:Multiple Choices
表示重定向的响应状态码,表示该请求拥有多种可能的响应。
用户代理或者用户自身应该从中选择一个。由于没有如何进行选择的标准方法,这个状态码极少使用。
假如服务器可以提供一个优先选择,那么它应该生成一个
Location
首部。 -
301:Moved Permanently
说明请求的资源已经被移动到了由
Location
头部指定的 url 上,是固定的不会再改变。搜索引擎会根据该响应修正。 -
302:Found
表明请求的资源被暂时的移动到了由该 HTTP 响应的响应头
Location
指定的 URL 上。浏览器会重定向到这个 URL,但是搜索引擎不会对该资源的链接进行更新。即使规范要求浏览器在重定向时保证请求方法和请求主体不变,但并不是所有的用户代理都会遵循这一点,你依然可以看到有缺陷的软件的存在。所以推荐仅在响应
GET
或HEAD
方法时采用 302 状态码,而在其他时候使用307 Temporary Redirect
来替代,因为在这些场景下方法变换是明确禁止的。 -
303:See Other
通常作为
PUT
或POST
操作的返回结果,它表示重定向链接指向的不是新上传的资源,而是另外一个页面,比如消息确认页面或上传进度页面。而请求重定向页面的方法要总是使用GET
。 -
304:Not Modified
说明无需再次传输请求的内容,也就是说可以使用缓存的内容。这通常是在一些安全的方法(safe),例如
GET
或HEAD
或在请求中附带了头部信息:If-None-Match
或If-Modified-Since
。如果是
200 OK
,响应会带有头部Cache-Control
,Content-Location
,Date
,ETag
,Expires
,和Vary
。 -
307:Temporary Redirect
临时重定向响应状态码,表示请求的资源暂时地被移动到了响应的
Location
首部所指向的 URL 上。 -
308:Permanent Redirect(永久重定向)
说明请求的资源已经被永久的移动到了由
Location
首部指定的 URL 上。浏览器会进行重定向,同时搜索引擎也会更新其链接(用 SEO 的行话来说,意思是“链接汁”(link juice)被传递到了新的 URL)。
4xx
-
400:Bad Request
表示**服务器因某些被认为是客户端错误的原因(**例如,请求语法错误、无效请求消息格式或者欺骗性请求路由),而无法或不会处理该请求。
注意:客户端不应该在未进行修改的情况下重复发送此请求。
-
401:Unauthorized
代表客户端错误,指的是由于缺乏目标资源要求的身份验证凭证,发送的请求未得到满足。
这个状态码会与
WWW-Authenticate
首部一起发送,其中包含有如何进行验证的信息。这个状态类似于 403,但是在该情况下,依然可以进行身份验证。
-
402:Payment Required
是一个被保留使用的非标准客户端错误状态响应码。
有时,这个状态码表明直到客户端付费之后请求才会被处理。402 状态码被创建最初目的是用于数字现金或微型支付系统,表明客户端请求的内容只有付费之后才能获取。目前还不存在标准的使用约定,不同的实体可以在不同的环境下使用。
-
403:Forbidden
指的是服务器端有能力处理该请求,但是拒绝授权访问。
这个状态类似于
401
,但进入403
状态后即使重新验证也不会改变该状态。该访问是长期禁止的,并且与应用逻辑密切相关(例如没有足够的权限访问该资源)。 -
404:Not Found
指的是服务器无法找到所请求的资源。返回该响应的链接通常称为坏链(broken link)或死链(dead link),它们会导向链接出错处理(link rot)页面。
404 状态码并不能说明请求的资源是临时还是永久丢失。如果服务器知道该资源是永久丢失,那么应该返回
410
(Gone)而不是 404。 -
405:Method Not Allowed
表明服务器禁止了使用当前 HTTP 方法的请求。
-
406:Not Acceptable
指代服务器端无法提供与
Accept-Charset
以及Accept-Language
消息头指定的值相匹配的响应。主动内容协商标头包括:
实际上,这种错误极少使用。服务器不应使用此错误代码响应,因为它对终端用户来说很难理解和修复,而是忽略相关的标头并向用户提供实际页面。假设即使用户不完全满意,他们也会更喜欢这种情况,而不是错误代码。
如果服务器返回了这个错误状态码,那么消息体中应该包含所能提供的资源表现形式的列表,允许用户手动进行选择。
-
407:Proxy Authentication Required
指的是由于缺乏位于浏览器与可以访问所请求资源的服务器之间的代理服务器(proxy server )要求的身份验证凭证,发送的请求尚未得到满足。
这个状态码会与
Proxy-Authenticate
首部一起发送,其中包含有如何进行验证的信息。 -
408:Request Timeout
表示服务器想要将没有在使用的连接关闭。一些服务器会在空闲连接上发送此信息,**即便是在客户端没有发送任何请求的情况下。
服务器应该在此类响应中将
Connection
首部的值设置为 “close”,因为408
意味着服务器已经决定将连接关闭,而不是继续等待。这类响应出现的比较频繁,源于一些浏览器——例如 Chrome, Firefox 27+, 或者 IE9 等——使用 HTTP 协议中的预连接机制来加速上网体验。同时应该注意到,某些服务器会直接关闭连接,而不发送此类消息。
-
409:Conflict
表示请求与服务器端目标资源的当前状态相冲突。
冲突最有可能发生在对
PUT
请求的响应中。例如,当上传文件的版本比服务器上已存在的要旧,从而导致版本冲突的时候,那么就有可能收到状态码为 409 的响应。 -
410:Gone
说明请求的目标资源在原服务器上不存在了,并且是永久性的丢失。
如果不清楚是否为永久或临时的丢失,应该使用
404
。 -
411:Length Required
表示由于缺少确定的
Content-Length
首部字段,服务器拒绝客户端的请求。注意,按照规范,当使用分块模式传输数据的时候,
Content-Length
首部是不存在的,但是需要在每一个分块的开始添加该分块的长度,用十六进制数字表示。参见Transfer-Encoding
获取更多细节信息。 -
412:Precondition Failed(先决条件失败)
意味着对于目标资源的访问请求被拒绝。这通常发生于采用除
GET
和HEAD
之外的方法进行条件请求时,由首部字段If-Unmodified-Since
或If-None-Match
规定的先决条件不成立的情况下。这时候,请求的操作——通常是上传或修改文件——无法执行,从而返回该错误状态码。 -
413:Content Too Large
表示请求主体的大小超过了服务器愿意或有能力处理的限度,服务器可能会关闭连接或返回
Retry-After
标头字段。在 RFC 9110 标准之前,该响应的短语为
Payload Too Large
,它仍在被广泛使用。 -
414:URI Too Long
表示客户端所请求的 URI 超过了服务器允许的范围。
以下是造成这种罕见情况的几种可能原因:
-
415:Unsupported Media Type
表示服务器由于不支持其有效载荷的格式,从而拒绝接受客户端的请求。
格式问题的出现有可能源于客户端在
Content-Type
或Content-Encoding
首部中指定的格式,也可能源于直接对负载数据进行检测的结果。 -
416:Range Not Satisfiable
意味着服务器无法处理所请求的数据区间。最常见的情况是所请求的数据区间不在文件范围之内,也就是说,
Range
首部的值,虽然从语法上来说是没问题的,但是从语义上来说却没有意义。416
响应报文包含一个Content-Range
首部,提示无法满足的数据区间(用星号 * 表示),后面紧跟着一个“/”,再后面是当前资源的长度。例如:Content-Range: */12777遇到这一错误状态码时,浏览器一般有两种策略:
- 要么终止操作(例如,一项中断的下载操作被认为是不可恢复的)
- 要么再次请求整个文件
-
417:Expectation Failed
意味着服务器无法满足
Expect
请求消息头中的期望条件。参考
Expect
消息头获得更多的相关细节信息。 -
418:I’m a teapot
表示服务器拒绝冲泡咖啡,因为它是个茶壶。
该错误是超文本咖啡壶控制协议的参考,和 1998 年愚人节的玩笑。
-
421:Misdirected Request
指示该请求被定向到无法产生响应的服务器。如果重新使用连接或选择替代服务,则可能会出现这种情况。
-
422:Unprocessable Content
表示服务器了解请求实体的内容类型,并且请求实体的语法是正确的,但无法处理包含的指令。
-
423:Locked
表示临时目标的资源已锁定,这意味着无法访问该资源。它的内容应该包含 WebDAV 的 XML 格式的一些信息。
-
424:Failed Dependency
指示无法对资源执行该方法,因为请求的操作依赖于另一个操作,而该操作失败。
常规web服务器通常不会返回此状态代码。但其他一些协议,如 WebDAV,可以返回它。例如,在 WebDAV 中,如果发出了 PROPPACH 请求,并且一个命令失败,则自动地,其他每个命令也将失败,并具有424失败的依赖关系。
-
425:Too Early
指示服务器不愿意冒险处理可能被重放的请求,这产生了重放攻击的可能性。
-
426:Upgrade Required
指示服务器拒绝使用当前协议执行请求,但是在客户端升级到不同协议之后可能愿意这样做。
服务器发送带有此响应的 Upgrade 标头,以指示所需的协议。
-
428:Precondition Required
表示服务器要求该请求是有条件的。
通常,这意味着缺少所需的前提条件标头,例如“如果匹配”。
当前置条件标头与服务器端状态不匹配时,响应应为412前置条件失败。
-
429:Too Many Requests
表示用户在给定的时间内发送了太多请求(“速率限制”)。
此响应中可能包含 Retry-After 标头,指示在发出新请求之前需要等待多长时间。
-
431:Request Header Fields Too Large
表示服务器拒绝处理该请求,因为该请求的 HTTP 标头太长。可以在减小请求头的大小之后重新提交请求。
431 可以在请求报头的总大小太大或者单个报头字段太大时使用。为了帮助那些遇到此错误的人,请在响应体中指出两者中的哪一个是问题所在——理想情况下,还包括哪些标头太大。这允许用户尝试解决问题,例如通过清除他们的 cookie。
如果出现以下情况,服务器通常会产生这种状态:
- 引用人 URL 太长
- 请求中发送的 Cookie 太多
-
451:Unavailable For Legal Reasons
指示用户请求的资源由于法律原因而不可用,例如已经发出法律诉讼的网页。
5xx
-
500:Internal Server Error
意味着所请求的服务器遇到意外的情况并阻止其执行请求。
这个错误代码是一个通用的“万能”响应代码。有时候,对于类似于 500 这样的错误,服务器管理员会更加详细地记录相关的请求信息来防止以后同样错误的出现。
-
501:Not Implemented
表示请求的方法不被服务器支持,因此无法被处理。服务器必须支持的方法(即不会返回这个状态码的方法)只有
GET
和HEAD
。注意:客户端无法修复 501 错误,需要被访问的 web 服务器去修复该问题。
-
502:Bad Gateway
它表示作为网关或代理的服务器,从上游服务器中接收到的响应是无效的。
注意:网关在计算机网络体系中可以指代不同的设备,502 错误通常不是客户端能够修复的,而是需要由途经的 Web 服务器或者代理服务器对其进行修复。
-
503:Service Unavailable
它表示服务器尚未处于可以接受请求的状态。
通常造成这种情况的原因是由于服务器停机维护或者已超载。注意在发送该响应的时候,应该同时发送一个对用户友好的页面来解释问题发生的原因。该种响应应该用于临时状况下,与之同时,在可行的情况下,应该在
Retry-After
首部字段中包含服务恢复的预期时间。缓存相关的首部在与该响应一同发送时应该小心使用,因为 503 状态码通常应用于临时状况下,而此类响应一般不应该进行缓存。
-
504:Gateway Timeout
表示扮演网关或者代理的服务器无法在规定的时间内获得想要的响应。
Gateway(网关)在计算机网络体系中可以指代不同的设备,504 错误通常不是在客户端可以修复的,而是需要由途径的 Web 服务器或者代理服务器对其进行修复。
-
505:HTTP Version Not Supported
表示服务器不支持请求所使用的 HTTP 版本。
-
506:Variant Also Negotiates
表示内部服务器配置错误,其中所选变量/变元自身被配置为参与内容协商,因此并不是合适的协商端点。
-
507:Insufficient Storage
表示服务器不能存储相关内容。准确地说,一个方法可能没有被执行,因为服务器不能存储其表达形式,这里的表达形式指:方法所附带的数据,而且其请求必需已经发送成功。
-
508:Loop Detected
表示服务器中断一个操作,因为它在处理具有“Depth: infinity”的请求时遇到了一个无限循环。508 码表示整个操作失败。
-
510:Not Extended
在 HTTP 扩展框架协议(参见 RFC 2774)中发送。
在 HTTP 扩展框架协议中,一个客户端可以发送一个包含扩展声明的请求,该声明描述了要使用的扩展。如果服务器接收到这样的请求,但是请求不支持任何所描述的扩展,那么服务器将使用 510 状态码进行响应。
-
511:Network Authentication Required
表示客户端需要通过验证才能使用该网络。
该状态码不是由源头服务器生成的,而是由控制网络访问的拦截代理服务器生成的。
网络运营商们有时候会在准许使用网络之前要求用户进行身份验证、接受某些条款,或者进行其他形式的与用户之间的互动(例如在网络咖啡厅或者机场)。他们通常用用户设备的 MAC 地址来进行识别。