HTTP(HTTP Status Code)状态码简介

HTTP状态码就是用以表示网页服务器HTTP响应状态的3位数字代码。 当浏览访问一个网页时,浏览器作为客户端会向网页所在服务器发出请求。服务器则会返回一个包含HTTP状态码的信息头(server header)用以响应浏览器的请求。

几个常见的HTTP状态码:

  • 200 - 请求成功
  • 301 - 资源(网页等)被永久转移到其它URL
  • 404 - 请求的资源(网页等)不存在
  • 500 - 内部服务器错误

HTTP状态码由三个十进制数字组成,第一个十进制数字定义了状态码的类型,后两个数字没有分类的作用。每个状态码的第一个数字都代表了响应的五种状态之一。

分类 分类描述
1XX 消息,服务器收到请求,需要请求者继续执行操作
2XX 成功,操作被成功接收并处理
3XX 重定向,需要进一步的操作以完成请求
4XX 请求错误,请求包含语法错误或无法完成请求
5XX 服务器错误,服务器在处理请求的过程中发生了错误

一、消息类:代表请求已被接受,需要继续处理。

这类响应是临时响应,只包含状态行和某些可选的响应头信息,并以空行结束。由于 HTTP/1.0 协议中没有定义任何 1xx 状态码,所以除非在某些试验条件下,服务器禁止向此类客户端发送 1xx 响应。

状态码 名称 描述
100 Continue (继续)表示告知客户端继续发送连接请求。
101 Switching Protocols (切换协议)通知客户端切换其它的协议来完成这个请求。

100: 这个临时响应是用来通知客户端它的部分请求已经被服务器接收,且仍未被拒绝。

  • 客户端应当继续发送请求的剩余部分,或者如果请求已经完成,忽略这个响应。
  • 服务器必须在请求完成后向客户端发送一个最终响应。

101: 服务器已经理解了客户端的请求,并将通过Upgrade 消息头通知客户端采用不同的协议来完成这个请求。在发送完这个响应最后的空行后,服务器将会切换到在Upgrade消息头中定义的那些协议。

二、成功类:表示请求已成功被服务器接收,处理等。

状态码 名称 描述
200 OK (成功)请求已成功。服务器成功返回网页。
201 Created (已创建)请求已成功并且服务器创建了新的资源。
202 Accepted (已接受)服务器已接受请求,但尚未处理。
203 Non-Authoritative Information (非授权信息)服务器已成功处理了请求,但返回的数据可能来自本地,也可能来自第三方。
204 No Content (无内容)服务器成功处理了请求,但没有返回任何内容。
205 Reset Content (重置内容)服务器成功处理了请求,但没有返回任何内容。
206 Partial Content (部分内容)服务器成功处理了部分 GET 请求。

200: 一般用于GET与POST请求,请求所希望的响应头或数据体将随此响应返回。

  • GET响应中发送对应于所请求资源的实体;
  • HEAD与所请求的资源相对应的实体头部字段在没有任何消息体的响应中发送;
  • POST一个描述或包含动作结果的实体;
  • TRACE包含终端服务器接收到的请求消息的实体。

201: 新的资源已经依据请求的需要而建立,新创建的资源可以由响应实体中返回的URI引用,由位置头字段给出的资源最具体的URI。

  • 响应应该包括一个包含资源特征和位置的实体,用户或用户代理可以从该列表中选择最适合的一个。实体格式由Content-Type头字段中指定的媒体类型指定。
  • 原始服务器必须在返回201状态代码之前创建资源。如果该操作无法立即执行,服务器应该返回202(Accepted)来响应。
  • 另外201响应可以包含ETag响应头字段,指示刚创建的请求变体的实体标签的当前值。

202: 正如它可能被拒绝一样,最终该请求可能会也可能不会被执行。在异步操作的场合下,没有比发送这个状态码更方便的做法了。

203: 请求被成功处理,但返回的实体头部元信息(meta信息)不是在原始服务器上有效的确定集合,而是一个来自本地或者第三方的拷贝副本。

  • 所呈现的集合可以是原始版本的子集或超集。例如,包括有关资源的本地注释信息可能会导致源服务器已知的元信息的超集。
  • 不需要使用此响应代码,仅当响应为200(OK)时才适用。

204: 服务器成功处理了请求,但不需要返回任何实体内容,并且希望返回更新了的元信息。

  • 响应可能通过实体头部的形式,返回新的或更新后的元信息。
  • 如果存在这些头部信息,则应当与所请求的变量相呼应。
  • 在未更新网页的情况下,可确保浏览器继续显示当前文档。
  • 204响应不能包括消息体,因此总是在头字段之后的第一个空行终止。

205: 服务器成功处理了请求,且没有返回任何内容。

  • 与204响应不同,返回此状态码的响应要求用户代理应该重置导致发送请求的文档视图。
  • 该响应主要是被用于接受用户输入后,立即重置表单,以便用户能够轻松地开始另一次输入。
  • 答复不能包括实体。

三、重定向类:代表需要客户端采取进一步的操作才能完成请求。

通常,这些状态码用来重定向,后续的请求地址(重定向目标)在本次响应的Location 域中指明。当且仅当第二个请求中使用的方法是GET或HEAD时,所需的操作可以由用户代理执行,而不与用户交互。客户端应该检测无限重定向循环,因为这样的循环为每个重定向生成网络流量。

状态码 名称 描述
300 Multiple Choices (多种选择)服务器提供一系列可供选择的回馈信息,每个都有自己特定的地址和浏览器驱动的商议信息。
301 Moved Permanently (永久移动)请求的资源已永久移动到新位置,并且将来任何对此资源的引用都应该使用本响应返回的若干个URI之一。
302 Move temporarily (临时移动) 服务器目前从不同位置的资源响应请求,但以后的请求者可以继续引用原有位置的资源。
303 See Other (查看其他位置)与301类似,当前请求的响应可以在另一个URI(位置)上被找到,而且客户端应当采用 GET 的方式访问那个资源。
304 Not Modified (未修改) 请求(Get)资源未修改过。服务器返回此响应时,不会返回网页内容。
305 Use Proxy (使用代理)被请求的资源必须通过指定的代理才能被访问。
307 Temporary Redirect (临时重定向) 与302类似,服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。

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

如果客户端正在发送数据,则在服务器关闭输入连接之前,使用TCP的服务器实现应该小心,以确保客户端确认收到包含响应的数据包。如果客户端在关闭后继续向服务器发送数据,则服务器的TCP堆栈将向客户端发送一个重置数据包,这可能会擦除客户端未确认的输入缓冲区,然后才能被HTTP应用程序读取和解释。

状态码 名称 描述
400 Bad Request (错误请求)语法错误、参数错误。
401 Unauthorized (未授权) 请求用户需要身份验证。
403 Forbidden (禁止) 服务器拒绝执行请求。
404 Not Found (未找到) 服务器找不到请求的资源。
405 Method Not Allowed (方法禁用)请求中指定的方法不能被用于请求相应的资源。
406 Not Acceptable (不接受)请求的内容特性无法满足请求的条件,无法得到资源。
407 Proxy Authentication Required (需要代理授权) 此状态代码与 401(未授权)类似,但指定请求者应当授权使用代理。
408 Request Time-out (请求超时)请求发生超时。客户可以随时重复请求而不进行修改。
409 Conflict (冲突)请求和被请求的资源的当前状态之间存在冲突,请求无法完成。
410 Gone (已删除)请求的资源已永久删除。
411 Length Required (需要有效长度) 服务器不接受不含有效内容长度标头字段的请求。
412 Precondition Failed (未满足前提条件) 服务器未满足请求者在请求中设置的其中一个前提条件。
413 Request Entity Too Large (请求实体过大) 服务器无法处理请求,因为请求实体过大,超出服务器的处理能力。
414 Request-URI Too Large (请求的 URI 过长) 请求的 URI(通常为网址)过长,服务器无法处理。
415 Unsupported Media Type (不支持的媒体类型) 请求的格式不受请求页面的支持。
416 Requested range not satisfiable (请求范围不符合要求) 如果页面无法提供请求的范围,则服务器会返回此状态代码。
417 Expectation Failed (未满足期望值) 服务器未满足”期望”请求标头字段的要求。

403: 如果请求方法不是HEAD,并且服务器希望公开为什么请求尚未实现,则应该描述拒绝实体的原因。

404: 服务器没有找到与Request-URI匹配的任何内容。

  • 没有指示条件是暂时的还是永久的。
  • 如果服务器通过一些内部可配置的机制知道旧的资源永久不可用,并且没有转发地址,则应该使用410(Gone)状态码。
  • 当服务器不希望明确地显示请求被拒绝的原因,或者没有其他响应适用时,通常使用此状态代码。

405: 由Request-URI标识的资源不允许在Request-Line中指定的方法。响应必须包括一个包含所请求资源的有效方法列表的Allow标头。

406: 由请求标识的资源仅能够根据请求中发送的接受头来生成内容特征不可接受的响应实体。如果响应不可接受,则用户代理应该暂时停止接收更多的数据,并询问用户对进一步的操作做出决定。

409: 只有在预期用户可能能够解决冲突并重新提交请求的情况下,才允许使用此代码。响应机构应该包括足够的信息供用户识别冲突的根源。理想情况下,响应实体将包括足够的信息供用户或用户代理解决问题; 然而,这可能是不可能的,不是必需的。

410: 所请求的资源在服务器上不再可用,并且没有转发地址是已知的。这种情况有望被认为是永久性的。

412: 该响应代码允许客户端在当前资源元信息(头字段数据)上放置前提条件,从而防止所请求的方法被应用于除预期的资源之外的资源。

五、服务器错误类:代表服务器在处理请求时发生内部错误或异常。

另外也有可能是服务器意识到以当前的软硬件资源无法完成对请求的处理。 同请求错误类一样,除非这是一个HEAD 请求,否则服务器应该返回一个包含错误情况说明的实体,以及它是一个临时的还是永久的。用户代理(浏览器)应该向用户显示任何包含的实体。这些响应代码适用于任何请求方法。

状态码 名称 描述
500 Internal Server Error (服务器内部错误) 服务器遇到错误,无法完成请求。
501 Not Implemented (尚未实施) 服务器不具备完成请求的功能。例如,服务器无法识别请求方法时可能会返回此代码。
502 Bad Gateway (错误网关) 服务器作为网关或代理尝试执行请求时,从上游服务器收到无效响应。
503 Service Unavailable (服务不可用) 服务器目前无法使用(由于超载或停机维护)。通常,这只是暂时状态。
504 Gateway Time-out (网关超时) 服务器作为网关或代理尝试执行请求时,未能及时从上游服务器(URI标识出的服务器,例如HTTP、FTP、LDAP)或者辅助服务器(例如DNS)收到响应。
505 HTTP Version not supported (HTTP 版本不受支持) 服务器不支持请求中所用的 HTTP 协议版本。

505: 服务器表示它不能或不愿意使用与客户端相同的主要版本来完成请求,而不是此错误消息。响应应该包含一个描述为什么不支持该版本以及该服务器支持哪些其他协议的实体。