HTTP1.1状态码速查清单

"状态码及其使用场景详解"

Posted by is Q on June 21, 2020

任何一个开发者都会接触到HTTP状态码,但是规范已经定义的状态码数量较多,经常会忘记,这篇文章就是提供一个速查手册。

快速索引

http状态码由三位数字组成,第一位代表状态所属的类型,目前分为五大类:

  1. 100-199:信息状态码。
  2. 200-299:表示成功状态。
  3. 300-399:表示资源被转移。
  4. 400-499:表示客户端请求出错。
  5. 500-599:表示服务器处理请求出错。

100 - 101信息状态码

  • 100:continue,告诉客户端后面的数据传输可以继续。该状态码实际上是一个优化措施,应该是给服务器传输大体积的实体时,可以先用一个值为100 continue的except请求询问服务器是否支持该资源的处理或者能够使用该资源,服务器不应该给任何没有协带值为100 continue的except请求响应100 continue状态码。
  • 101:switching protocols,说明服务器正在按照客户端的要求,切换为update指定的协议。

200 - 206成功状态码

  • 200:ok,请求完成,响应实体的主体部分包含用户所请求的资源。
  • 201:created,资源被创建(比如put),响应实体的主体中应该包含引用各种被创建资源的URL,同时也可以使用location首部指定资源的实际位置。
  • 202:accepted,请求被接受,但是服务器没有进行任何操作。服务器无法保证资源一定会被创建,响应报文的主体中应该包含请求状态信息,甚至应该包含请求操作完成的估计时间。
  • 203:non-authoritative infromation,实体首部包含的信息不是来自源端服务器,而是来自资源的一份副本,中间节点无法对实体首部的信息与资源源端服务器进行验证。
  • 204:not content,响应报文的主体部分不存在,一般用在不需要展示新文档的情况。
  • 205:reset content,告诉浏览器重置当前文档的所有表单元素。
  • 206:partial content,表示成功执行某个部分或Range(范围)请求。

300 - 307重定向状态码

  • 300:Multiple choices,当一个URL指向多个资源时,服务器就可以向客户端返回该状态码;一般情况下如果存在多个资源,客户端应该为用户提供选择,同时也可以使用Location首部指出默认的资源。

  • 301:Moved permanently,所请求URL的资源被移除时使用,资源的新URL应该在Location指出,以后都是使用Location给出的URL返回资源。

  • 302(http1.0):Found,所请求URL的资源被移除时使用,客户端应该使用Location给出的URL作为资源的临时位置。

  • 303:See other,告知客户端应该使用另一个URL来访问资源,主要用于将post请求定向到指定的资源。

  • 304:Not modified,当请求协带某些特殊的首部的时候,请求就变成了条件请求,用于验证客户端本地的资源副本和源服务器的资源是否一样,如果原服务器的资源并没有发生改变,就可以使用这个状态码,告知客户端可以使用本地资源副本。

  • 305:Use proxy,应该使用代理访问,这个状态码用于某个特定资源必须通过代理进行获取,存储该资源的所有服务器都应该通过代理访问资源。

  • 306:暂时未使用。

  • 307(http1.1):Temporary redirect,所请求的资源被移除时使用,客户端应该使用Location首部指出的URL来临时请求资源。

    ​ 302、303和307都是临时重定向码,但是他们实际上http1.0和http1.1为了兼容而导致的,其实302在http1.0中表示的意思是,服务器接收到一个post请求之后,将会响应302状态码,并希望客户端可以接受重定向URL,然后客户端通过get请求获取资源。但是在 http1.1中303状态码取代了302的作用,因此为了将302保留给http1.0应用程序使用,所以http1.1中使用了307来表示临时重定向。

400 - 417客户端错误状态码

  • 400:Bad request,客户端发送的请求服务器无法理解,请求可能存在语法问题。
  • 401:Unauthorized,未授权,当访问的资源需要进行认证的时候,向客户端返回该状态码,并应该在响应带上某些首部,告知客户端具体采用什么认证方案。
  • 402:Payment required,暂时未使用。
  • 403:Forbidden,禁止访问,客户端没有访问该资源的权限。
  • 404:Not found,服务器找不到客户端所请求的资源。
  • 405:Method not allowed,客户端所请求的URL不支持当前请求方法,响应中应该包含Allow首部,告诉客户端支持的请求的方法有哪些。
  • 406:Not acceptable,客户端可以指定能够接受的数据类型,当服务器上对应请求URL没有客户端接受的数据类型时返回此状态码。
  • 407:Proxy authentication required,和401的效果一样,只是该状态码用于对资源进行认证的代理服务器。
  • 408:Request timeout,客户端请求的时间太长,请求超时。
  • 409:Conflict,当请求可能会导致资源冲突时使用该状态码。
  • 410:Gone,和404类似,但是该状态码说明服务器以前拥有该资源,只是现在被移除了。
  • 411:Length required,当服务器要求所请求应该协带Content-length首部但是请求中未协带该首部的时候使用此状态码。
  • 412:Precondition failed,客户端发请求条件请求,并且其中的一个条件失败时使用此状态码,使用Expect首部就是条件请求。
  • 413:Request entity too large,客户端所发送的实体比服务器能够或者希望处理的要大时,使用此状态码。
  • 414:Request url too length,客户端所发送的请求中URL比服务器能偶活着希望处理的要大时,使用此状态码。
  • 415:Unsupported media type,客户端发送的实体是服务器无法理解或者无法支持的类型时,使用此状态码
  • 416:Request range satisfiable,当客户端请求某个资源的某个范围时,当此范围无效或者无法满足时,使用此状态码。
  • 417:Exceptation failed,请求的Expect首部包含客户端的请求期望,当服务器无法满足时,使用该状态码。

500 - 505服务器错误状态码

  • 500:Internal server error,服务器在处理请求时遇到问题,导致无法提供服务时,使用此状态码。
  • 501:Not implement,客户端发起的请求超出服务器的能力范围,比如使用了服务器不支持的请求方法。
  • 502:Bad gateway,作为网关或者代理的服务器,在请求和响应链的下一条链路上收到一个伪响应(连接不上父服务器)时,使用该状态码。
  • 503:Server unavailable,服务器暂时无法为客户端提供服务,但是将来可以提供服务,如果服务器知道资源什么时候可用,可以在响应中包含一个Retry-After首部。
  • 504:Gateway Timeout,和408类似,只是该响应来自于一个网关或者代理服务器,在它们等待另一个服务器超时使用该状态码。
  • 505:Http version not supported,客户端请求使用了服务器无法或者不愿支持的http版本,比如有一些应用程序不愿支持早期的http版本。

参考资料:《HTTP权威指南》