HTTP状态码

429 阅读15分钟
  • 100 Continue 表示目前为止一切正常, 客户端应该继续请求, 如果已完成请求则忽略. 为了让服务器检查请求的首部, 客户端必须在发送请求实体前, 在初始化请求中发送 Expect: 100-continue 首部并接收 100 Continue 响应状态码。

  • 101 Switching Protocol 状态码表示服务器应客户端升级协议的请求(Upgrade请求头)正在切换协议。 服务器会发送一个Upgrade响应头来表明其正在切换过去的协议。

  • 103 Early Hints 一般和 Link header(首部)一起使用,来允许用户在服务器还在准备响应数据的时候预加载一些资源。

  • 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 (代理服务器)的修改。

      203 状态码有点类似于 Warning 首部的 214(Transformation Applied)警告码,后者        的优势在于可以应用于任何状态码的响应之中。

  • 204 No Content 成功状态响应码,表示该请求已经成功了,但是客户端客户不需要离开当前页面。默认情况下 204 响应是可缓存的。一个 ETag 标头包含在此类响应中。  使用惯例是,在 PUT 请求中进行资源更新,但是不需要改变当前展示给用户的页面,那么返回 204 No Content。如果创建了资源,则返回 201 Created 。如果应将页面更改为新更新的页面,则应改用 200 。

  • 205 Reset Content 用来通知客户端重置文档视图,比如清空表单内容、重置 canvas 状态或者刷新用户界面。

  • 206 Partial Content 成功状态响应代码表示请求已成功,并且主体包含所请求的数据区间,该数据区间是在请求的 Range 首部指定的。 

  •  如果只包含一个数据区间,那么整个响应的 Content-Type 首部的值为所请求的文件的类型,同时包含 Content-Range 首部。 如果包含多个数据区间,那么整个响应的 Content-Type 首部的值为 multipart/byteranges ,其中一个片段对应一个数据区间,并提供 Content-Range 和 Content-Type 描述信息。

  • 300 Multiple Choices 是一个用来表示重定向的响应状态码,表示该请求拥有多种可能的响应。用户代理或者用户自身应该从中选择一个。由于没有如何进行选择的标准方法,这个状态码极少使用。 假如服务器可以提供一个优先选择,那么它应该生成一个 Location 首部。

  • 301 Moved Permanently 说明请求的资源已经被移动到了由 Location 头部指定的url上,是固定的不会再改变。搜索引擎会根据该响应修正。

  • 302 Found 重定向状态码表明请求的资源被暂时的移动到了由Location 头部指定的 URL 上。浏览器会重定向到这个URL, 但是搜索引擎不会对该资源的链接进行更新。在确实需要将重定向请求的方法转换为 GET的场景下,可以使用 303 See Other。例如在使用 PUT 方法进行文件上传操作时,需要返回确认信息(例如“你已经成功上传了xyz”)而不是上传的资源本身,就可以使用这个状态码。

  • 303 See Other 重定向状态码,通常作为 PUT 或 POST 操作的返回结果,它表示重定向链接指向的不是新上传的资源,而是另外一个页面,比如消息确认页面或上传进度页面。而请求重定向页面的方法要总是使用 GET。

  • 304 Not Modified 说明无需再次传输请求的内容,也就是说可以使用缓存的内容。这通常是在一些安全的方法(safe),例如GET 或HEAD 或在请求中附带了头部信息: If-None-Match 或If-Modified-Since。

  • 307 Temporary Redirect 临时重定向响应状态码,表示请求的资源暂时地被移动到了响应的 Location 首部所指向的 URL 上。

  •  状态码 307 与 302 之间的唯一区别在于,当发送重定向请求的时候,307 状态码可以确保请求方法和消息主体不会发生变化。如果使用 302 响应状态码,一些旧客户端会错误地将请求方法转换为 GET:也就是说,在 Web 中,如果使用了 GET 以外的请求方法,且返回了 302 状态码,则重定向后的请求方法是不可预测的;但如果使用 307 状态码,之后的请求方法就是可预测的。对于 GET 请求来说,两种情况没有区别。

  • 308 Permanent Redirect(永久重定向)是表示重定向的响应状态码,说明请求的资源已经被永久的移动到了由 Location 首部指定的 URL 上。浏览器会进行重定向,同时搜索引擎也会更新其链接。在重定向过程中,请求方法和消息主体不会发生改变,然而在返回 301 状态码的情况下,请求方法有时候会被客户端错误地修改为 GET 方法。

  • 400 Bad Request 响应状态码表示由于语法无效,服务器无法理解该请求。 客户端不应该在未经修改的情况下重复此请求。

  • 401 Unauthorized 代表客户端错误,指的是由于缺乏目标资源要求的身份验证凭证,发送的请求未得到满足。 这个状态码会与 WWW-Authenticate 首部一起发送,其中包含有如何进行验证的信息。 这个状态类似于 403, 但是在该情况下,依然可以进行身份验证。

  • 402 Payment Required 一个被保留使用的非标准客户端错误状态响应码。 有时, 这个状态码表明直到客户端付费之后请求才会被处理。402状态码被创建最初目的是用于数字现金或微型支付系统, 表明客户端请求的内容只有付费之后才能获取。目前还不存在标准的使用约定, 不同的实体可以在不同的环境下使用。

  • 403 Forbidden 代表客户端错误,指的是服务器端有能力处理该请求,但是拒绝授权访问。 这个状态类似于 401,但进入该状态后不能再继续进行验证。该访问是长期禁止的,并且与应用逻辑密切相关(例如不正确的密码)。

  • 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 消息头指定的值相匹配的响应。如果服务器返回了这个错误状态码,那么消息体中应该包含所能提供的资源表现形式的列表,允许用户手动进行选择。

  • 408 Request Timeout 表示服务器想要将没有在使用的连接关闭。一些服务器会在空闲连接上发送此信息,即便是在客户端没有发送任何请求的情况下。 服务器应该在此类响应中将 Connection 首部的值设置为 "close",因为 408 意味着服务器已经决定将连接关闭,而不是继续等待。

  • 407 Proxy Authentication Required 代表客户端错误,指的是由于缺乏位于浏览器与可以访问所请求资源的服务器之间的代理服务器(proxy server )要求的身份验证凭证,发送的请求尚未得到满足。 这个状态码会与 Proxy-Authenticate 首部一起发送,其中包含有如何进行验证的信息。

  • 409 Conflict 表示请求与服务器端目标资源的当前状态相冲突。 冲突最有可能发生在对 PUT 请求的响应中。例如,当上传文件的版本比服务器上已存在的要旧,从而导致版本冲突的时候,那么就有可能收到状态码为 409 的响应。

  • 410 Gone 说明请求的目标资源在原服务器上不存在了,并且是永久性的丢失。如果不清楚是否为永久或临时的丢失,应该使用404。410 响应默认会被缓存

  • 411 Length Required 属于客户端错误,表示由于缺少确定的Content-Length 首部字段,服务器拒绝客户端的请求。

  • 412 Precondition Failed 表示客户端错误,意味着对于目标资源的访问请求被拒绝。这通常发生于采用除 GET 和 HEAD 之外的方法进行条件请求时,由首部字段 If-Unmodified-Since 或 If-None-Match 规定的先决条件不成立的情况下。这时候,请求的操作——通常是上传或修改文件——无法执行,从而返回该错误状态码。

  • 413 Payload Too Large 表示请求主体的大小超过了服务器愿意或有能力处理的限度,服务器可能会关闭连接以防止客户端继续发送该请求。 如果“超出限度”是暂时性的,服务器应该返回 Retry-After 首部字段,说明这是暂时性的,以及客户端可以在什么时间后重试。

  • 414 URI Too Long 表示客户端所请求的 URI 超过了服务器允许的范围。 以下是造成这种罕见情况的几种可能原因:

  •  当客户端误将 POST 请求当作 GET 请求时,会带有一个较长的查询字符串(query)

  •  当客户端堕入重定向循环黑洞时,例如,指向自身后缀的重定向URI前缀

  • 当客户端对服务器进行攻击,试图寻找潜在的漏洞时。

  • 415 Unsupported Media Type 表示服务器由于不支持其有效载荷的格式,从而拒绝接受客户端的请求。 格式问题的出现有可能源于客户端在 Content-Type 或 Content-Encoding 首部中指定的格式,也可能源于直接对负载数据进行检测的结果。

  • 416 Range Not Satisfiable 服务器无法处理所请求的数据区间。最常见的情况是所请求的数据区间不在文件范围之内,也就是说,Range 首部的值,虽然从语法上来说是没问题的,但是从语义上来说却没有意义。 416 响应报文包含一个 Content-Range 首部,提示无法满足的数据区间(用星号 * 表示),后面紧跟着一个“/”,再后面是当前资源的长度。例如:Content-Range: */12777 遇到这一错误状态码时,浏览器一般有两种策略:要么终止操作(例如,一项中断的下载操作被认为是不可恢复的),要么再次请求整个文件。

  • 417 Expectation Failed 表示客户端错误,意味着服务器无法满足 Expect 请求消息头中的期望条件。

  • 425 Too Early  代表服务器不愿意冒风险来处理该请求,原因是处理该请求可能会被“重放”,从而造成潜在的重放攻击。

  • 426 Upgrade Required 表示服务器拒绝处理客户端使用当前协议发送的请求,但是可以接受其使用升级后的协议发送的请求。 服务器会在响应中使用 Upgrade 首部来指定要求的协议。

  • 428 Precondition Required 表示服务器端要求发送条件请求。 一般的,这种情况意味着必要的条件首部——如 If-Match ——的缺失。

  • 429 Too Many Requests 表示在一定的时间内用户发送了太多的请求,即超出了“频次限制”。 在响应中,可以提供一个 Retry-After 首部来提示用户需要等待多长时间之后再发送新的请求。

  • 431 Request Header Fields Too Large 表示由于请求中的首部字段的值过大,服务器拒绝接受客户端的请求。客户端可以在缩减首部字段的体积后再次发送请求。 该响应码可以用于首部总体体积过大的情况,也可以用于单个首部体积过大的情况。 这种错误不应该出现于经过良好测试的投入使用的系统当中,而是更多出现于测试新系统的时候

  • 451 Unavailable For Legal Reasons 表示服务器由于法律原因,无法提供客户端请求的资源,例如可能会导致法律诉讼的页面。

  • 500 Internal Server Error 表示服务器端错误的响应状态码,意味着所请求的服务器遇到意外的情况并阻止其执行请求。 这个错误代码是一个通用的“万能”响应代码。有时候,对于类似于 500 这样的错误,服务器管理员会更加详细地记录相关的请求信息来防止以后同样错误的出现。

  • 501 Not Implemented 表示请求的方法不被服务器支持,因此无法被处理。服务器必须支持的方法(即不会返回这个状态码的方法)只有 GET 和 HEAD。501 响应默认是可缓存的。

  • 502 Bad Gateway 它表示作为网关或代理角色的服务器,从上游服务器(如tomcat、php-fpm)中接收到的响应是无效的。

  • 503 Service Unavailable 它表示服务器尚未处于可以接受请求的状态。 通常造成这种情况的原因是由于服务器停机维护或者已超载。注意在发送该响应的时候,应该同时发送一个对用户友好的页面来解释问题发生的原因。该种响应应该用于临时状况下,与之同时,在可行的情况下,应该在 Retry-After 首部字段中包含服务恢复的预期时间。 缓存相关的首部在与该响应一同发送时应该小心使用,因为 503 状态码通常应用于临时状况下,而此类响应一般不应该进行缓存。

  • 504 Gateway Timeout 表示扮演网关或者代理的服务器无法在规定的时间内获得想要的响应。

  • 505 HTTP Version Not Supported 表示服务器不支持请求所使用的 HTTP 版本。

  • 511 Network Authentication Required 表示客户端需要通过验证才能使用该网络。 该状态码不是由源头服务器生成的,而是由控制网络访问的拦截代理服务器生成的。 网络运营商们有时候会在准许使用网络之前要求用户进行身份验证、接受某些条款,或者进行其他形式的与用户之间的互动(例如在网络咖啡厅或者机场)。他们通常用用户设备的 MAC 地址来进行识别。