2
头图

前言

在前端开发过程中,关于HTTP网络请求相关的使用也是必备的,尤其是前后端交互的时候,根据实际业务实现具体需求功能。前端实际开发应用场景中,比较有代表性的关于网络请求相关的使用有:跨域问题/设置代理、接口返回code码(HTTP状态码)、代理、token、cookie欺诈、GET/POST请求等等,这些都是常用知识点。那么本篇博文就来分享一下关于HTTP状态码相关的知识点,尤其是不同开头的code码代表的含义,总结一下,方便查阅使用。

HTTP状态码是什么?

维基百科的解释:HTTP状态码(HTTP Status Code)是用以表示网页服务器超文本传输协议响应状态的3位数字代码。它由 RFC 2616 规范定义的,并得到 RFC 2518、RFC 2817、RFC 2295、RFC 2774 与 RFC 4918 等规范扩展。所有状态码被分为五类,状态码的第一个数字代表了响应的五种状态之一。所示的消息短语是典型的,但是可以提供任何可读取的替代方案。 除非另有说明,状态码是HTTP/1.1标准(RFC 7231)的一部分。

百度百科的解释:HTTP状态码(HTTP Status Code)是用以表示网页服务器HTTP响应状态的3位数字代码。它由 RFC 2616 规范定义的,并得到RFC 2518、RFC 2817、RFC 2295、RFC 2774、RFC 4918等规范扩展。所有状态码的第一个数字代表了响应的五种状态之一。

个人理解:HTTP状态码,也就是一个3位数的HTTP请求响应状态码,也就是前端开发中说的code码,接口根据状态类型来返回对应的状态码。

常见HTTP 状态码

作为程序开发者,都知道且在实际开发中常见的HTTP状态码,如下所示:

  • 200 - 请求成功;
  • 301 - 资源(网页等)被永久转移到其它URL;
  • 304 - 客户端通常会缓存访问过的资源,通过提供一个Header头信息指出客户端希望只返回在指定日期之后修改的资源信息;
  • 404 - 请求的资源(网页等)不存在;
  • 500 - 内部服务器错误。

HTTP状态码分类

通过上文可以知道HTTP 状态码由三个十进制数字组成,第一个十进制数字定义了状态码的类型。HTTP响应分为五类:信息响应(100–199)、成功响应(200–299)、重定向(300–399)、客户端错误(400–499)和服务器错误 (500–599)。具体如下表所示:

HTTP状态码详细分类汇总

全部的HTTP状态码有很多,这里只分享常用的状态码,具体如下所示:

1、 1*开头(信息提示),表示临时的响应的状态码(注意:客户端在收到常规响应之前,应准备接收一个或多个 1 * 响应)。

  • 100 - Continue 继续。初始请求已被接受,客户应当继续发送请求的其余部分。
  • 101 - Switching Protocols 切换协议。 服务器将遵从客户端的请求切换到另外一种协议,且只能切换到更高级的协议。

2、 2**开头 (请求成功),表示成功接收处理请求的状态码。

  • 200 - 请求成功。 服务器已成功处理了请求, 一般这表示服务器提供了请求的网页,主要是用于GET和POST请求。
  • 201 - 已创建。 请求成功并且创建了新的资源。
  • 202 - 已接受。 服务器已经接受请求,但尚未处理完毕。
  • 203 - 非授权信息。请求成功,服务器已成功处理了请求,但返回的meta信息可能来自另一来源,而是一个副本。
  • 204 - 无内容。 服务器成功处理请求,但没有返回任何内容。
  • 205 - 重置内容。 服务器成功处理请求,但没有返回任何内容,客户端应该重置文档视图。
  • 206 - 部分内容。 服务器成功处理了部分 GET 请求。

3、 3** 开头 (请求被重定向),表示要完成请求,需要进一步操作的状态码(注意:一般情况下这些状态代码被用来重定向)。

  • 300 - 多种选择。 请求的资源可包括多个位置,会相应返回一个资源特征与地址的列表,用于客户端选择。
  • 301 - 永久移动。 请求的资源已永久移动到新的位置(URI),返回信息包括新的URI,浏览器会自动重定向到新的URI,往后任何新的请求都要使用心的URI代替。
  • 302 - 临时移动。与上面的301相似,但是资源只是临时被移动,客户端应该继续使用原有的URI。
  • 303 - 查看其他地址位置。与上面的301类似,使用GET和POST请求查看, 请求应当对不同的位置使用单独的 GET 请求来检索响应时,服务器返回此状态码。
  • 304 - 未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。客户端通常会缓存访问过的资源,通过提供一个Header头信息指出客户端希望只返回在指定日期之后修改的资源。
  • 305 - 使用代理。 所有请求只能使用代理访问请求网页。若服务器返回该响应,表示请求应使用代理。
  • 306 - Switch Proxy。 在最新版的规范中,306状态码已经不再被使用,起初是指“后续请求应使用指定的代理”。
  • 307 - 临时重定向。 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。

4、4**开头 (请求错误),表示请求可能会出错,妨碍了服务器的处理。

  • 400 - 错误请求。 客户端请求语法错误,服务器不理解请求的语法。
  • 401 - 未授权。 请求要求用户进行身份验证,尤其是需要登录的网页,服务器可能返回此响应。
  • 402 - 预留。保留,将来使用。
  • 403 - 禁止。 服务器已经理解请求客户端的请求,但是服务器拒绝执行该请求。
  • 404 - 未找到。 服务器找不到客户端请求寻找的资源。
  • 405 - 方法禁用。客户端请求中的方法被禁止。
  • 406 - 不接受。 服务器无法根据客户端请求的内容特性完成请求。
  • 407 - 需要代理授权。和 401(未授权)类似,请求要求代理的身份认证。但请求者应当使用代理进行授权。
  • 408 - 请求超时。 服务器等候客户端发送的请求时间过长,超时。
  • 409 - 冲突。 服务器在完成客户端请求时发生冲突,服务器必须在响应中包含有关冲突的信息。
  • 410 - 已删除。 户端请求的资源已经不存在,如果请求的资源已永久删除,服务器就会返回此响应。
  • 411 - 需要有效长度。 服务器无法处理客户端发送的不带Content-Length的请求信息,服务器不接受不含有效内容长度标头字段的请求。
  • 412 - 未满足前提条件。 客户端请求信息的先决条件错误,服务器未满足客户端请求中设置的其中一个前提条件。
  • 413 - 请求实体过大。 服务器无法处理请求,超出服务器的处理能力,因此拒绝请求。
  • 414 - 请求的 URI 过长。 请求的 URI过长(通常为网址),服务器无法处理。
  • 415 - 不支持的媒体类型。 服务器无法处理请求附带的媒体格式,请求的格式不受请求的支持。
  • 416 - 请求范围不符合要求。 客户端请求的范围无效,如果页面无法提供请求范围,则会返回此状态码。
  • 417 - 未满足期望值。 服务器无法满足Expect的请求头字段的要求。

5、 5**开头(服务器错误),表示服务器在尝试处理请求时发生内部错误(注意:极有可能是服务器本身的错误,而不是请求本身出错)。

  • 500 - 服务器内部错误。 服务器遇到内部错误,无法完成请求。
  • 501 - 尚未实施。 服务器不具备/不支持完成请求的功能,无法完成请求。
  • 502 - 错误网关。 服务器作为网关或代理尝试执行请求时,从远程服务器接收到一个无效响应。
  • 503 - 服务不可用。 由于超载或系统维护,服务器暂时的无法处理客户端的请求。延时的长度可包含在服务器的Retry-After头信息中,通常这只是暂时状态。
  • 504 - 网关超时。 服务器作为网关或代理,但没有及时从远端服务器获取请求。
  • 505 - HTTP 版本不受支持。 服务器不支持请求中所用的 HTTP 协议的版本,无法完成处理。

6、非官方的状态码
除了上面介绍的常用的HTTP状态码,还有一些非官方的状态码,具体如下所示:

  • 420 - Enhance Your Calm 提高你的耐心。Twitter搜索与趋势 API在客户端被限速的情况下返回。
  • 431 - 请求头部字段太大。服务器因为一个单独的请求头字段或者是全部的字段太大而不想处理该请求。
  • 444 - No Response 无响应。Nginx上HTTP服务器扩展,服务器不向客户端返回任何信息。
  • 450 - Blocked by Windows Parental Controls 被Windows家长控制阻塞(微软)。这是微软的一个扩展,当Windows家长控制打开并且阻塞指定网页的访问的时候被指定。
  • 494 - Request Header Too Large 请求头太大。与431类似,在错误代码431提出之前Nginx上使用的扩展HTTP代码。

7、状态码与状态不一致的情况
实际开发过程中,有时候会遇到返回的状态码响应都是错误的,但是用户可能觉察不到这种情况,比如前端应用程序内部发生报错,但是状态码依然返回200,这种情况经常遇到。

8、其他:IIS
微软互联网信息服务 (Microsoft Internet Information Services),有时候会使用额外的十进制子代码来获取更多的具体信息,但这些子代码仅仅出现在响应有效内容和文档中,但不会代替实际的HTTP状态码。

最后

通过本文可以知道前端开发中HTTP状态码的详细内容,需要了解掌握的是五个大的状态类型表示的含义,以及常用的几个具体的状态码表示的含义,尤其是从事前端开发不就的开发者来说甚为重要,因为在前端求职面试的时候关于前端HTTP状态码相关的问题是必考内容,还有关于HTTP请求的特点的考察,所以重要性不言而喻,这里不再赘述。以上就是本文全部内容,欢迎关注三掌柜!

本文参与了「SegmentFault 思否写作挑战赛」,欢迎正在阅读的你也加入。


三掌柜
13.6k 声望6.1k 粉丝

一分耕耘,不一定有一分收获,但十分耕耘,一定会有一分收获!