HTTP 状态码

一、是什么

HTTP 状态码(英语:HTTP Status Code),用以表示网页服务器超文本传输协议响应状态的 3 位数字代码

它由 RFC 2616 规范定义的,并得到 RFC 2518RFC 2817RFC 2295RFC 2774RFC 4918等规范扩展

简单来讲,http 状态码的作用是服务器告诉客户端当前请求响应的状态,通过状态码就能判断和分析服务器的运行状态

二、响应被归为五大类

  1. 信息响应 (100–199)
  2. 成功响应 (200–299)
  3. 重定向消息 (300–399)
  4. 客户端错误响应 (400–499)
  5. 服务端错误响应 (500–599)

1xx 信息响应

代表请求已被接受,需要继续处理。这类响应是临时响应,只包含状态行和某些可选的响应头信息,并以空行结束

常见的有:

  • 100 Continue: 这个临时响应表明,迄今为止的所有内容都是可行的,客户端应该继续请求,如果已经完成,则忽略它。
  • 101 Switching Protocols(协议切换): 该代码是响应客户端的 Upgrade (en-US)open in new window 请求头发送的, 指明服务器即将切换的协议。主要用于 WebSocket 或 升级 HTTP 1.1HTTP 2.0
  • 102 Processing (WebDAV): 此代码表示服务器已收到并正在处理该请求,但当前没有响应可用。
  • 103 Early Hints: 此状态代码主要用于与 Link 链接头一起使用,以允许用户代理在服务器准备响应阶段时开始预加载 preloading 资源。

2xx 成功响应

代表请求已成功被服务器接收、理解、并接受

常见的有:

  • 200 OK(成功):请求成功。
  • 201 Created(已创建):请求成功并且服务器创建了新的资源。这通常是在 POST 请求,或是某些 PUT 请求之后返回的响应。
  • 202 Accepted(已接收):请求已经接收到,但还未响应,没有结果。
  • 203 Non-Authoritative Information(非授权信息):服务器已成功处理请求,但返回的信息可能来自另一来源。
  • 204 No Content(无内容):服务器成功处理请求,但没有返回任何内容,但头部字段可能有用。
  • 205 Reset Content(重置内容):告诉用户代理重置发送此请求的文档。
  • 206 Partial Content(部分内容):当从客户端发送Range范围标头以只请求资源的一部分时,将使用此响应代码。

3xx

表示要完成请求,需要进一步操作。

常见的有:

  • 300 Multiple Choice(多种选择):请求拥有多个可能的响应。 服务器可根据请求者 (user agent) 选择一项操作,或提供操作列表供请求者选择。
  • 301 Moved Permanently(永久移动):请求资源的 URL 已永久更改。在响应中给出了新的 URL。
  • 302 Found(临时移动): 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。
  • 303 See Other(查看其他位置):请求者应当对不同的位置使用单独的 GET 请求来检索响应时,服务器返回此代码。
  • 304 Not Modified(没有被修改):协商缓存,这是用于缓存的目的。它告诉客户端响应还没有被修改,因此客户端可以继续使用相同的缓存版本的响应。
  • 307 Temporary Redirect(临时重定向): 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。
  • 308 Permanent Redirect(永久重定向):这意味着资源现在永久位于由 Location: HTTP Response 标头指定的另一个 URI

4xx 客户端错误响应

4xx

代表了客户端看起来可能发生了错误,妨碍了服务器的处理。

常见的有:

  • 400 Bad Request(错误请求):由于被认为是客户端错误(例如,错误的请求语法、无效的请求消息帧或欺骗性的请求路由),服务器无法或不会处理请求。
  • 401 Unauthorized(未授权):请求要求身份验证。 对于需要登录的网页,服务器可能返回此响应。
  • 403 Forbidden(禁止):客户端没有访问内容的权限,服务器拒绝提供请求的资源。
  • 404 Not Found(未找到):服务器找不到请求的资源。
  • 405 Method Not Allowed(方法禁用):禁用请求中指定的方法。
  • 406 Not Acceptable(不接受):无法使用请求的内容特性响应请求的网页
  • 407 Proxy Authentication Required(需要代理授权):类似于 401 Unauthorized 但是认证需要由代理完成。
  • 408 Request Timeout(请求超时):服务器等候请求时发生超时。
  • 409 Conflict(冲突):当请求与服务器的当前状态冲突时,将发送此响应。
  • 414 URI Too Long(URI 太长):客户端请求的 URI 比服务器愿意接收的长度长。
  • 418 I'm a teapot(我是茶壶):服务端拒绝用茶壶煮咖啡。笑话,典故来源茶壶冲泡咖啡。HTCPCP(超文本咖啡壶控制协议)服务器是一个茶壶。

5xx 服务端错误响应

表示服务器无法完成明显有效的请求。这类状态码代表了服务器在处理请求的过程中有错误或者异常状态发生

常见的有:

  • 500 Internal Server Error(服务器内部错误):服务器遇到了不知道如何处理的情况。
  • 501 Not Implemented(尚未实施):服务器不支持请求方法,因此无法处理。服务器需要支持的唯二方法(因此不能返回此代码)是 GET and HEAD。
  • 502 Bad Gateway(错误网关): 服务器作为网关或代理,从上游服务器收到无效响应。
  • 503 Service Unavailable(服务不可用): 服务器没有准备好处理请求。常见原因是服务器因维护或重载而停机。
  • 504 Gateway Timeout(网关超时): 服务器作为网关或代理,但是没有及时从上游服务器收到请求。
  • 505 HTTP Version Not Supported(HTTP 版本不受支持): 服务器不支持请求中使用的 HTTP 版本。

三、适用场景

下面给出一些状态码的适用场景:

  • 100:客户端在发送POST数据给服务器前,征询服务器情况,看服务器是否处理POST的数据,如果不处理,客户端则不上传POST数据,如果处理,则POST上传数据。常用于POST大数据传输

  • 206:一般用来做断点续传,或者是视频文件等大文件的加载

  • 301:永久重定向会缓存。新域名替换旧域名,旧的域名不再使用时,用户访问旧域名时用301就重定向到新的域名

  • 302:临时重定向不会缓存,常用于未登陆的用户访问用户中心重定向到登录页面

  • 304:协商缓存,告诉客户端有缓存,直接使用缓存中的数据,返回页面的只有头部信息,是没有内容部分

  • 400:参数有误,请求无法被服务器识别

  • 403:告诉客户端禁止访问该站点或者资源,如在外网环境下,然后访问只有内网IP才能访问的时候则返回

  • 404:服务器找不到资源时,或者服务器拒绝请求又不想说明理由时

  • 503:服务器停机维护时,主动用503响应请求或 nginx 设置限速,超过限速,会返回503

  • 504:网关超时

上次更新:
Contributors: jingmin.jiang, kyxiao, jiangjingmin