HTTP/1.1状态代码
本文性质:结合google support,RFC以及wikipedia中内容进行了相关整理,以供参考.
HTTP状态码(HTTP Status Code)用以标识网页服务器HTTP相应状态的3位数字代码,
一些常见的状态代码为:
- 200 – 服务器成功返回网页
- 404 – 请求的网页不存在
- 503 – 服务器暂时不可用
以下提供HTTP代码状态的完整列表:
1xx (Informational 信息临时响应)
这一类型的状态码,代表请求已被接受,需继续处理。这类相应是临时相应,至包含状态行和某些可选的响应头信息,并以空行结束。由于HTTP/1.0协议中没有定义任何 1xx状态码,所以除非在某些试验条件下,服务器禁止向此类客户端发送1xx相应。包含状态码如下:
- 100 (Continue 继续):客户端应当继续发出请求。服务器端返回此代码意味着服务器已经收到部分请求,正等待接收其余请求。客户端应当继续发送请求的剩余部分,或者如果请求已经完成,忽略该响应。服务器必须在请求完成后向客户端发送一个最终响应。
- 101 (Switching Protocols 切换协议): 服务器端已经准备好切换协议。在发送完这个响应最后的空行后,服务器将会切换到Upgrade消息头中定义的那些协议。只有在切换新的协议更有好处的时候才应该采取类似措施.
2xx (OK 成功)
此类状态码标识请求已被服务端接收并已经成功处理了请求
- 200 (OK 成功):请求已经成功处理,请求所希望的响应头或数据体将随此相应返回
- 201 (Create 已创建):请求成功且服务器已创建了新的资源,且其URI(Uniform Resource Identifier)已随Location头信息返回。如果需要的资源无法及时建立的话,应该返回’202 Accepted’
- 202 (Accepted 已接受): 服务器已接受请求,但尚未处理。
- 203 (Non-Authoritative Information 非法授权信息):服务器已成功处理了请求,但返回的实体头部元信息不实在原始服务器上有效的确定集合,而是来自本地或者第三方的拷贝。当前的信息可能是原始版本的子集或者超集。
- 204(No Content 无内容):服务器已成功处理了请求,但不需要返回任何实体内容。由于204响应被禁止包含任何消息体,因此它始终以消息头后的第一个空行结尾。
- 205(Reset Content 内容重置):服务器成功处理了请求,切没有返回任何内容,但与204响应不同,此状态码的响应要求客户端重置文档视图。此响应主要用于接受用户输入后,立即重置表单,以便用户呢能够轻松开始新的输入。与204响应一样,该响应也被禁止包含任何消息体,且以消息头后的第一个空行结束。
- 206(Partial Content 部分内容): 服务器已成功处理了部分GET请求。类似于FlashGet、迅雷等使用此响应实现断电续传或者将一个大文档分解为多段同时下载。该请求必须包含Range头信息以指示客户端希望得到的内容范围,并且可能包含If-Range来作为请求条件.
3xx(Redirection 重定向)
此类状态码代表需客户端采取进一步的操作才能完成请求。通常,这类状态码用于重定向,后续的请求地址(重定向目标)在本次响应的Location域中指定。
注意:当且仅当后续的请求使用的方法是GET或者HEAD时,用户浏览器才可以再没有用户介入的情况下自动提交所需要的后续请求。客户端应当自动检测无限循环重定向(例如:A–>A或者A–>B–>C–>A),因为这会导致服务器和客户端大量不必要的资源消耗。根据HTTP/1.0版规范的建议,浏览器不应自动访问超过5此的重定向。
- 300(Multiple Choices 多种选择):服务器根据请求可执行多种操作。用户或浏览器能够自行选择一个首选的地址进行重定向。如果服务器本身已有首选的回馈选择,那么将在Location中应当知名这个回馈的URI,浏览器可能会将这个Location值作为重定向的地址。
- 301(Moved Permanently 永久移动):被请求的资源已被永久移动到新位置,并且将来任何对此资源的应用都应该使用本响应返回的若干个URI之一.
- 302(Found 临时移动):请求的资源现临时从不同的URI响应请求。由于此重定向是临时的,客户端应该继续向原有地址发送以后的请求。临时性的URI应当在相应的Location域中返回。
- 303(See Other 查看其他位置):对应当前请求的响应可以在另一个URI上被找到,而且客户端应该采取GET的方式访问那个资源。同时303响应禁止被缓存。 注意: 需要HTTP/1.1版以前的浏览器无法正确理解303状态。如果需考虑在这些浏览器间的互动,302状态码应该可以胜任。
- 304(Not Modified 未修改):自从上次请求后,请求的网页未被修改过。服务器返回此响应时,禁止包含消息体,因此时钟以消息头后的第一个空行结尾。
- 305(Use Proxy 使用代理):被请求的资源必须通过制定的代理才能被访问。Location域中将在指定的代理所在的URI信息。接收者需重复发送一个单独的请求,通过这个代理才能访问相应的资源。只有原始服务器才能建立305响应
- 306(Unused ):未使用
- 307(Temporary Redirect 临时性重定向):请求的资源现在临时从不同的URI响应请求。
4xx (Client Error 请求错误)
此类代码代表客户端可能发生了错误,妨碍了服务器的处理。如果错误发生时客户端正在传送数据,那么使用TCP的服务器应该确保在关闭客户端与服务器之间的链接之前,客户端已经收到了包含错误信息的数据包。如果客户端在收到错误信息后继续向服务器发送数据,服务器的TCP栈将向客户端发送一个充值数据包,以清除客户端所有还未识别的输入缓冲,以免这些数据被服务器上的应用程序读取并干扰后者。
- 400(Bad Request 错误请求):由于语法错误,当前请求无法被服务器理解。除非进行修改,否则客户端不应该重复提交这个请求.
- 401(Unauthorized 未授权):当前请求需要用户验证。该请求必须包含一个被适用于被请求支援的WWW-Authenticate信息头用以询问用户信息。客户端可以重复提交一个包含恰当的Authorization头信息的请求。如果当前请求已经包含了Authorization证书,那么401响应代表着服务器验证已经拒绝了那些证书.
- 402(Payment Required):保留,暂未使用
- 403(Forbidden 已禁止):服务器已经理解请求,但拒绝执行。与401响应不同的是,身份验证并不能提供任何帮助,而且这个请求也不应该被重复提交。
- 404(Not Found 未找到):请求失败,请求所需要的资源未被再服务器上发现。没有信息能够告诉用户这个状况到底是暂时的还是永久的。
- 405(Method Not Allowed 方法不被允许):请求行中指定的请求方法不能被用于请求响应的资源。该响应必须返回一个Allow头信息用以表示出当前资源能够接受的请求方法的列表.鉴于PUT,DELETE方法会在服务器上资源进行写操作,因而绝大部分的网页服务器都不支持或者在默认配置下不允许上述请求方法,对于此类请求均会返回405错误.
- 406(Not Acceptable 不接受):请求的资源内容特性无法满足请求头中的条件,因而无法生成响应实体。
- 407(Proxy Authentication Required 需要代理授权):与401响应类似,但需要客户端在代理服务器进行身份验证。代理服务器必须返回一个Proxy-Authenticate用以身份询问。客户端可以返回一个Proxy-Authorization信息头用以验证
- 408(Request Timeout 请求超时):客户端没有在服务器预备等待的时间内完成一个请求的发送。客户端可以随时再次提交这一请求而无需进行任何修改.
- 409(Conflict 冲突):由于和被请求的资源的当前状态之间存在冲突,请求无法完成
- 410(Gone 已删除):被请求的资源在服务器上已经不再可用,而且没有任何已知的转发地址。这种状况应当被认为是永久性的.该代码与404代码类似,但在资源以前有但现在已经不复存在的情况下,有时会替代404代码出现。
- 411(Length Required 需要有效长度):服务器拒绝在没有定义Content-Length头的情况下接受请求
- 412(Precondition Failed 未满足前提条件):服务器在验证请求的头字段中给出先决条件时,没能满足其中的一个或多个
- 413(Request Entity Too Large请求试题过大):服务器拒绝处理当前请求,因为该请求提交的实体数据大小超过了服务器愿意或者能够处理的范围.
- 414(Request-URL Too Long请求的URL过长):请求的URI长度超过了服务器能够解释的长度,因此服务器拒绝对该请求提供服务.
- 415(Unsupported Media Type 不支持的媒体类型):对于当前请求的方法和所请求的资源,请求中提交的实体并不是服务器中所支持的格式,因此请求被拒绝.
- 416(Requested Range Not Satisfiable请求范围不符合要求):如果请求中包含了Range请求头,并且Range中指定的任何数据范围都与当前资源的可用范围不重合,同时请求中又没有定义If-Range请求头,那么服务器就应当返回416状态码.
- 417(Expectation Failed未满足期望值):在请求头Expect中指定的预期内容无法被服务器满足.
5xx(Server Error 服务器错误)
此类状态码代表了服务器在处理请求的过程中有错误或者异常状态发生,也有可能是服务器意识到以当前的硬件资源无法完成对请求的处理.
- 500(Internal Server Error服务器内部错误):服务器遇到一个未曾预料的状况,导致无法完成对请求的处理。一般来讲,这个问题都会在服务器的程序代码出错时出现
- 501(Not Implemented尚未实施):服务器不支持当前请求所需要的某个功能。
- 502(Bad Gateway 网关错误):作为网关或者代理工作的服务器尝试执行请求时,从上游服务器接收到无效的响应
- 503(Server Unavailable服务不可用):由于临时的服务器维护或者过载,服务器当前无法处理请求。这个状况是类似的,并且在一段时间以后恢复。如果能够预计延迟时间,那么响应中可以包含一个Retry-After头用以标明这个延迟时间。如果没有给出Retry-After信息,客户端应当以处理500响应方式处理它。需要注意的是,503状态码存在并不意味着服务器在过载的时候必须使用它。某些服务器只不过希望拒绝客户端的连接
- 504(Gateway Timeout网关超时):作为网关或者代理工作的服务器尝试执行请求时,未能及时从上游服务器(URI标识出的服务器)或者辅助服务器(如DNS)收到响应.注意:某些代理服务器在DNS查询超时时会返回400或者500错误
- 505(HTTP Version Not Supported HTTP版本不受支持):服务器不支持或者拒绝支持在请求中使用的HTTP版本,这暗示服务器不能或者不愿意使用与客户端相同的版本。响应中应当包含一个描述为何版本不被支持以及服务器支持哪些协议的实体.
参考文献:
- RFC 2616 : http://www.faqs.org/rfcs/rfc2616.html
- Google support HTTP状态代码: http://www.google.com/support/webmasters/bin/answer.py?hl=cn&answer=40132
- wikipedia HTTP状态码: http://zh.wikipedia.org/wiki/HTTP%E7%8A%B6%E6%80%81%E7%A0%81