网络 - 状态码
100~199信息性状态码
这些状态码较新,在HTTP/1.1引入。下面是已定义的状态码:
Code | 原因短语 | 描述 |
---|---|---|
100 | Continue | 服务器收到请求的初始部分,请客户端继续。 |
101 | Switching Protocols | 服务器正在根据客户端的指定,将协议更换成Update首部所列协议。 |
对于状态码100,起初的设计是为了:客户端想发送一个实体到服务器,但在发送之前想查看服务器是否愿意接受。需要知道的是:
-
对于客户端,若客户端希望发送一个实体,并且愿意等待服务器状态码为100的响应,那么客户端的请求报文中应包含值为100 Continue的Expect首部。客户端在发送请求后,不要一直等待,可以在超出一定时间后直接发送实体。
-
对于服务器,若服务器收到包含值为100 Continue的首部,应该以100 Continue或其他对应错误状态码响应。服务器不应该向没有包含100 Continue首部的请求响应100 Continue状态码。若服务器在响应100 Continue状态之前已经收到客户端发送的实体部分,可以跳过响应100 Continue,但要响应最终的状态。
-
对于代理,若代理接受到客户端包含100 Continue的请求,在代理知道请求的下一跳只支持HTTP/1.0(或更早),它应该响应417 Expectation Failed;在代理知道下一跳支持HTTP/1.1或没有清楚的状态,则应转发这一请求。若代理将上游服务器响应转发给客户端时,知道客户端不支持HTTP/1.1,则不应响应100 Continue。
200~299成功状态码
在请求成功时,服务器会返回代表成功的状态码;对于不同的请求方法,状态码有可能会有区别。已知的成功状态码如下:
Code | 原因短语 | 描述 |
---|---|---|
200 | OK | 最常见。请求成功,响应主体包含了具体的数据。 |
201 | Created | 响应在服务器 创建资源的请求,如PUT。服务器应确保资源被创建,并在响应报文中包含资源URL。 |
202 | Accepted | 服务器以接收到请求,但还未执行任何操作。 |
203 | Non-Authoritative Information | 实体首部(也可以称为元信息)包含的信息不是来自于服务器,而是资源的一个副本。若中间节点上有一份资源副本,但无法或没有对它发出的与资源有关的元信息进行验证,就会出现这种情况。当然,这种状态并不是非用不可,若实体首部来自服务器,返回200完全可以。 |
204 | No Content | 响应报文中无主体部分。主要用于在浏览器不转为显示新文档情况下,对其更新。 |
205 | Reset Content | 负责告知浏览器清除当前页面中所有HTML元素。 |
206 | Partial Content | 成功执行一个部分或Range请求。客户端可以在首部中指定请求某个范围内的文件。该状态响应头部必须包含Content-Range、Date、以及ETag或Content-Location。 |
300~399重定向状态码
已知状态码列表:
Code | 原因短语 | 描述 |
---|---|---|
300 | Multiple Choices | 客户端请求实际指向多个资源的URL。客户端可以在响应中找到资源列表。 |
301 | Moved Permanently | 请求的URL已被移除。响应的Location首部包含现在所处的位置。 |
302 | Found | 与301类似,客户端本次应使用响应中的临时URL,将来的请求任使用以前的URL。 |
303 | See Other | 告知客户端使用另一个URL来获取资源。其主要目的是,允许POST请求的响应将客户端定向的某一个资源上去。 |
304 | Not Modified | 若客户端发起一个有条件的GET请求,而资源未被修改,可以使用该状态码说明资源未被修改。 |
305 | Use Proxy | 必须通过代理来访问这一资源,代理有Location首部给出。需要知道的是,客户端接收到这一状态时,不应该假定所有请求都经过代理。 |
306 | 未使用 | 暂未使用。 |
307 | Temporary Redirect | 和302相同。 |
300~399重定向状态码-2.png
对于302、303、307状态码的说明:从上面表格上看,这3个状态码出现交叉的情况;在HTTP/1.0,只有302,服务器希望对POST请求响应302后,客户端向从定向的URL发送GET请求。303、307是在HTTP/1.1加入,303时,浏览器依然执行HTTP/1.0 302的动作;307,只是不会将原始的POST转为GET,而是询问用户。这些都是规范说辞,但实际运用中不是这么回事,你有看到大量的307?
400~499客户端错误状态码
有时客户端发送服务器无法处理的东西,会导致错误。
已知状态码列表:
Code | 原因短语 | 描述 |
---|---|---|
400 | Bad Request | 告知客户端它发送了一个错误的请求。 |
401 | Unauthorized | 与适当首部一同返回,告知客户端在请求之前先进行认证。 |
402 | Payment Required | 保留未使用。 |
403 | Forbidden | 请求被拒绝。 |
404 | Not Found | 服务器无法找到请求的URL。 |
405 | Method Not Allowed | 客户端使用不支持的方法请求URL。应该在首部使用Allow告知客户端正确的方法。 |
406 | Not Acceptable | 客户端在使用指定参数说明其愿意接收什么类型的实体,但服务器没有与之对应的资源。 |
407 | Proxy Authentication Required | 代理服务器要求客户端验证。 |
408 | Request Timeout | 客户端完成请求时间过长,服务器可以关闭链接。 |
409 | Conflict | 服务器认为该请求可能引起冲突。响应主体中应包含冲突的主体的描述。 |
410 | Gone | 与404类似,只是服务器曾经拥有此资源,后来被移除。 |
411 | Length Required | 服务器要求请求报文中包含Content-Length首部。 |
412 | Precondition Failed | 客户端发起条件请求,其中有条件失败。 |
413 | Request Entity Too Large | 客户端发送的主体部分比服务器能够活希望处理的要大。 |
414 | Request URI Too Long | URL过长。 |
415 | Unsupported Media Type | 服务器无法理解或无法支持客户端发送的内容类型。 |
416 | Requested Range Not Satisfiable | 请求范围无效或无法满足。 |
417 | Expectation Failed | 请求首部包含Expect期望,但服务器无法满足。 |
500~599服务器错误状态码
客户端发送的是有效请求,服务器自身出错。下面是已知状态码列表:
Code | 原因短语 | 描述 |
---|---|---|
500 | Internal Server Error | 服务器遇到一个妨碍它提供服务的错误。 |
501 | Not Implemented | 客户端发起的请求超出服务器能力范围,如使用了不支持的方法。 |
502 | Bad Gateway | 无效网关。通常不是这上游服务器关闭,而是使用了上游服务器不同意协议交换数据。 |
503 | Service Unavailable | 服务器暂时无法提供服务。若服务器知道服务什么时间可以使用,可以在响应头中加入Retry-After首部说明。 |
504 | Gateway Timeout | 于408类似,只是这里的响应来自一个网关或代理,它们在等待另一个服务器响应对其请求响应时超时。 |
505 | HTTP Version Not Support | 服务器收到的请求使用了它无法支持的协议版本。 |
参考文章:
https://juejin.im/post/5a4f782c5188257326469d7c
HTTP协议详解(一)