HTTP响应状态码
- 400 Bad Request
- 401 Unauthorized
- 403 Forbidden
- 404 Not Found
- 410 Gone
- 405 Method Not Allowed
- 406 Not Acceptable
- 407 Proxy Authentication Required
- 408 Request Timeout
- 409 Conflict
- 411 Length Required
- 412 Precondition Failed
- 428 Precondition Required
- 413 Payload Too Large
- 414 URI Too Long
- 415 Unsupported Media Type
- 416 Range Not Satisfiable
- 417 Expectation Failed
- 421 Misdirected Request
- 422 Unprocessable Entity (WebDAV)
- 423 Locked (WebDAV)
- 424 Failed Dependency (WebDAV)
- 425 Too Early
- 426 Upgrade Required
- 429 Too Many Requests
- 431 Request Header Fields Too Large
- 451 Unavailable For Legal Reasons(因法律原因不可用)
400 Bad Request
- 语义有误(语法无效),当前请求无法被服务器理解。除非进行修改,否则客户端不应该重复提交这个请求。
- 请求参数有误。
401 Unauthorized
缺乏目标资源要求的身份验证凭证,发送的请求未得到满足。
这个状态码会与 WWW-Authenticate 首部一起发送,其中包含有如何进行验证的信息。
客户端可以重复提交一个包含恰当的 Authorization 头信息的请求。
如果当前请求已经包含了 Authorization 证书,那么401响应代表着服务器验证已经拒绝了那些证书。这个状态类似于 403, 但是在401下,依然可以进行身份验证。
响应示例:
HTTP/1.1 401 Unauthorized
Date: Wed, 21 Oct 2015 07:28:00 GMT
WWW-Authenticate: Basic realm="Access to staging site"
403 Forbidden
服务器已经理解请求,但是拒绝授权访问。
这个状态类似于 401,但进入该状态后不能再继续进行验证。该访问是长期禁止的,并且与应用逻辑密切相关(例如不正确的密码)。
如果这不是一个 HEAD
请求,而且服务器希望能够讲清楚为何请求不能被执行,那么就应该在实体内返回拒绝的原因。
如果它不希望让客户端获得任何信息,服务器可以返回一个 404 响应。
404 Not Found
服务器端无法找到所请求的资源。
返回该响应的链接通常称为坏链(broken link) 或 死链(dead link),它们会导向链接出错处理(link rot)页面。
404 状态码并不能说明请求的资源是临时还是永久丢失。
404这个状态码被广泛应用于当服务器不想揭示到底为何请求被拒绝或者没有其他适合的响应可用的情况下。
如果服务器知道该资源是永久丢失,那么应该返回 410 (Gone),来告知旧资源因为某些内部的配置机制问题,已经永久的不可用,而且没有任何可以跳转的地址。
410 Gone
被请求的资源在服务器上已经不再可用,而且没有任何已知的转发地址。
这样的状况应当被认为是永久性的。
如果可能,拥有链接编辑功能的客户端应当在获得用户许可后删除所有指向这个地址的引用。如果服务器不知道或者无法确定这个状况是否是永久的,那么就应该使用 404 状态码。
除非额外说明,否则这个响应是可缓存的。
405 Method Not Allowed
表明服务器禁止了使用当前 HTTP 方法的请求。需要注意的是,GET 与 HEAD 两个方法不得被禁止,当然也不得返回状态码 405。
该响应必须返回一个Allow
头信息用以表示出当前资源能够接受的请求方法的列表。
鉴于 PUT
,DELETE
方法会对服务器上的资源进行写操作,因而绝大部分的网页服务器都不支持或者在默认配置下不允许上述请求方法,对于此类请求均会返回405错误。
406 Not Acceptable
指代服务器端无法提供与 Accept-Charset
以及 Accept-Language
消息头指定的值相匹配的响应。
如果服务器返回了这个错误状态码,那么消息体中应该包含所能提供的资源表现形式的列表,允许用户手动进行选择。
在实际应用中,这个错误状态码极少使用:不是给用户返回一个晦涩难懂(且难以更正)的错误状态码,而是将相关的消息头忽略,同时给用户提供一个看得见摸得着的页面。
407 Proxy Authentication Required
与401响应类似,只不过客户端必须在代理服务器上进行身份验证。
指的是由于缺乏位于浏览器与可以访问所请求资源的服务器之间的代理服务器(proxy server )要求的身份验证凭证,发送的请求尚未得到满足。
代理服务器必须返回一个 Proxy-Authenticate 用以进行身份询问。客户端可以返回一个 Proxy-Authorization 信息头用以验证。
响应示例:
HTTP/1.1 407 Proxy Authentication Required
Date: Wed, 21 Oct 2015 07:28:00 GMT
Proxy-Authenticate: Basic realm="Access to internal site"
408 Request Timeout
请求超时。客户端没有在服务器预备等待的时间内完成一个请求的发送。客户端可以随时再次提交这一请求而无需进行任何更改。
表示服务器想要将没有在使用的连接关闭。一些服务器会在空闲连接上发送此信息,即便是在客户端没有发送任何请求的情况下。
服务器应该在此类响应中将 Connection 首部的值设置为 “close”,因为 408 意味着服务器已经决定将连接关闭,而不是继续等待。
这类响应出现的比较频繁,源于一些浏览器——例如 Chrome, Firefox 27+, 或者 IE9 等——使用 HTTP 协议中的预连接机制来加速上网体验。同时应该注意到,某些服务器会直接关闭连接,而不发送此类消息。
409 Conflict
表示请求与服务器端目标资源的当前状态相冲突。
冲突最有可能发生在对 PUT 请求的响应中。例如,当上传文件的版本比服务器上已存在的要旧,从而导致版本冲突的时候,那么就有可能收到状态码为 409 的响应。
该响应应当包含足够的信息以便用户发现冲突的源头。
这个代码只允许用在这样的情况下使用:用户被认为能够解决冲突,并且会重新提交新的请求。
411 Length Required
表示由于缺少确定的Content-Length
首部字段,服务器拒绝客户端的请求。
在添加了表明请求消息体长度的有效 Content-Length 头之后,客户端可以再次提交该请求。
412 Precondition Failed
对于目标资源的访问请求被拒绝。
这通常发生于采用除 GET 和 HEAD 之外的方法进行条件请求时,由首部字段 If-Unmodified-Since
或 If-None-Match
规定的先决条件不成立的情况下。这时候,请求的操作——通常是上传或修改文件——无法执行,从而返回该错误状态码
428 Precondition Required
原始服务器要求该请求是有条件的。 旨在防止“丢失更新”问题,即客户端获取资源状态,修改该状态并将其返回服务器,同时第三方修改服务器上的状态,从而导致冲突。
一般的,这种情况意味着必要的条件首部:如 If-Match
的缺失。.
当一个条件首部的值不能匹配服务器端的状态的时候,应答的状态码应该是 412 Precondition Failed,前置条件验证失败。
413 Payload Too Large
表示请求主体的大小超过了服务器愿意或有能力处理的限度,服务器可能会(may)关闭连接以防止客户端继续发送该请求。
如果“超出限度”是暂时性的,服务器应该返回 Retry-After
首部字段,说明这是暂时性的,以及客户端可以在什么时间(after what time)后重试。
414 URI Too Long
表示客户端所请求的 URI
长度超过了服务器允许的范围,因此服务器拒绝对该请求提供服务。
以下是造成这种罕见情况的几种可能原因:
- 本应使用
POST
方法的表单提交变成了GET
方法,导致查询字符串(Query String)过长。 - 当客户端堕入重定向循环黑洞时,例如,指向自身后缀的重定向URI前缀(a redirected URI prefix that points to a suffix of itself);
- 当客户端对服务器进行攻击,试图寻找潜在的漏洞时。
415 Unsupported Media Type
对于当前请求的方法和所请求的资源,请求中提交的实体并不是服务器中所支持的格式,因此请求被拒绝。
格式问题的出现有可能源于客户端在 Content-Type
或 Content-Encoding
首部中指定的格式,也可能源于直接对负载数据进行检测的结果。
416 Range Not Satisfiable
意味着服务器无法处理所请求的数据区间。
最常见的情况是所请求的数据区间不在文件范围之内,也就是说,Range
首部的值,虽然从语法上来说是没问题的,但是从语义上来说却没有意义。
416 响应报文包含一个 Content-Range 首部,提示无法满足的数据区间(用星号 * 表示),后面紧跟着一个“/”,再后面是当前资源的长度。例如:Content-Range: */12777
遇到这一错误状态码时,浏览器一般有两种策略:要么终止操作(例如,一项中断的下载操作被认为是不可恢复的),要么再次请求整个文件。
417 Expectation Failed
意味着服务器无法满足 Expect
请求消息头中的期望条件。
421 Misdirected Request
该服务器未配置为针对包含在请求 URI
中的方案和权限的组合产生响应。该请求针对的是无法产生响应的服务器。
422 Unprocessable Entity (WebDAV)
表示服务器理解请求实体的内容类型,并且请求实体的语法是正确的,但是服务器无法处理所包含的指令。
重要提示:客户端不应在不修改的情况下重复发送此请求。
423 Locked (WebDAV)
正在访问的资源被锁定。
424 Failed Dependency (WebDAV)
由于先前的请求失败,所以此次请求失败。
425 Too Early
代表服务器不愿意冒风险来处理该请求,原因是处理该请求可能会被“重放”,从而造成潜在的重放攻击。
426 Upgrade Required
表示服务器拒绝处理客户端使用当前协议发送的请求,但是可以接受其使用升级后的协议发送的请求。
服务器会在426 响应中使用 Upgrade
首部来指定要求的协议。
429 Too Many Requests
表示在一定的时间内用户发送了太多的请求,即超出了“频次限制”。
在响应中,可以提供一个 Retry-After
首部来提示用户需要等待多长时间之后再发送新的请求。
响应示例:
HTTP/1.1 429 Too Many Requests
Content-Type: text/html
Retry-After: 3600
431 Request Header Fields Too Large
表示由于请求中的首部字段的值过大,服务器拒绝接受客户端的请求。客户端可以在缩减首部字段的体积后再次发送请求。
该响应码可以用于首部总体体积过大的情况,也可以用于单个首部体积过大的情况。
这种错误一般不会出现于经过良好测试的投入使用的系统当中,而是更多出现于测试新系统的时候。
451 Unavailable For Legal Reasons(因法律原因不可用)
表示服务器由于法律原因,无法提供客户端请求的资源,例如可能会导致法律诉讼的页面。