当浏览者访问一个网页时,浏览者的浏览器会向网页所在服务器发出请求。当浏览器接收并显示网页前,此网页所在的服务器会返回一个包含HTTP状态码的信息头(serverheader)用以响应浏览器的请求。
HTTP状态码的英文为HTTPStatusCode。下面是常见的HTTP状态码:
HTTP状态码由三个十进制数字组成,第一个十进制数字定义了状态码的类型,后两个数字没有分类的作用。HTTP状态码共分为5种类型:
10.状态码定义
不必转发相应的100(继续)状态响应。)
这类状态码指明客户端的请球已经被服务器成功的接收,理解,并且接受了。
TRACE响应里包含一个实体,此实体包含终端对服务器接收的请求消息。
202(接受)响应代替。一个201响应可以包含一个ETag响应头域,此头域的值指明了当前请求变量,也即刚刚创建的资源的实体标签(entitytag)值。
此状态码响应指明响应里实体头域元信息不能从源服务器获而是从本地的或第三方响应副本里收集的。这些元信息可能是源服务器版本的子集或超集。如,包含一个存在本地的资源注释信息就可以产生一个源服务器能理解的元信息的超集。利用此响应状态码不是必须但是比200(Ok)响应却更加合适。
205状态响应是服务器告诉用户代理应该重置引起请求被发送的文档视图。此响应主要的目的是清空文档视图表单里的输入框以便用户能输入其它信息。此响应不能包含一个实体。
如果206响应是使用了强缓存验证的If-Range请求的结果,那么此响应不应该包含其他的实体头域。如果响应是使用了弱缓存验证的If-Range请求的结果,那么响应必须不能包含其他的实体头域;这能防止缓存里缓存的实体主体与更新头域之间的不一致性。另外,响应必须包含假设在相同请求的200响应里的所有实体头域。缓存不能把206响应和以前的缓存内容相合并如果ETag或Last-Modified头域并不能精确匹配。一个不能支持Range和Content-Range头域的缓存不能缓存206(部分的)响应。
这类状态码指明用户代理需要更进一步的动作去完成请求。进一步的动作可能被用户代理自动执行而不需要用户的交互,并且进一步动作请求的方法必须为GET或HEAD。一个客户端应该发现无限的重定向循环,因为此循环能产生网络拥挤。注意:以前此规范版本建议一个最多能有五个重定向。内容开发者应该知道客户端可能存在这个限制。
URI来指明此表现形式的位置;用户代理可能会利用此Location头域自动重定向。300状态响应是可缓存的除非被特别指明。
注意:当客户端在接收了301状态码响应后,会重定向POST请求,一些已经存在的HTTP/1.0用户代理会错误的把此请求变成一个GET请求。
注意:RFC1945和RFC2068指定客户端不能在重定向请求的时候改变请求方法。然而,大多数用户代理实现会把302响应看成是303响应,从而根据Location头域值的URI执行GET请求,不管原始的请求方法是什么。303和307状态响应的目的是为使服务器明白客户端期望哪种类型的重定向。
如果条件GET请求使用强缓存验证时,那么响应不应包含其它实体头域。当条件GET使用弱缓存验证时,那么响应必须不能包含其它实体头域;这能防止缓存的实体主体与更新的头域之间的不一致性。如果一个304响应指示一个没有被缓存的实体,那么此缓存必须不用理会此响应,并且以无条件请求重试请求。如果缓存利用一个接收到的304响应去更新一个缓存项,那么缓存必须用此响应响应里任何最新的域值更新缓存项。
注意:RFC2068并没有说明305响应必须重定向一个单独请求并且只能被源服务器产生。不注意这些限制会有重要的安全后果。
306状态码被用于此规范以前的版本,是不再使用的意思,并且此状态码被保留。
请求的资源临时存在于一个不同的URI下。由于重新向可能有时会改变,所以客户端应该继续利用此请URI(Request-URI)为将来的请求。307响应只有被Cache-Control或Expire头域指明时才能被缓存。临时URI应该在响应的Location头域里给定。否则此响应应该包含一个超文本提示和一个指向新URI的超文本链接,因为许多HTTP/1.1以前的用户代理不能理解307状态响应。因此,此提示应该包含用户在新的URI上重试原始请求的必需信息。如果307状态响应.对应的请求的方法不是GET或HEAD,那么用户代理不能自动重定向此请求除非它能被用户确认,因为因为这可能会改变请求提交的条件。
状态码4xx类的目的是为了指明客户端出现错误的情况。除了当响应一个HEAD请求,服务器应该包含一个实体,此实体包含一个此错误请求的解释。此状态码对所有请求方法都是适合的。用户代理应该展示任何响应里包含的实体给用户。如果客户端发送数据,利用TCP的服务器实现应该小心地确保客户端确认包含了响应的包(packets)的接收,在服务器关闭此输入连接前。如果在关闭连接后,客户端继续发送数据给服务器,那么服务器的TCP栈将发送一个重置包给客户端,这能擦除客户端非确认的输入缓冲(inputbuffers)在这些缓冲被HTTP应用程序读和解析之前。
请求不能被服务器理解,由于错误的语法。客户端不应该在没有改变请求的情况下重试请求。
此状态码为将来的应用保留。
服务器理解此请求,但拒绝满足此请求。认证是没有作用的,并且请求不应该被重试。如果请求方法是HEAD并且服务器想让客户端知道请求为什么不能被满足,那么服务器起应该在响应实体里描述此拒绝的原因。如果服务器不希望告诉客户端拒绝的原因,那么404状态码(NotFound)响应将被使用。
服务器并没有找到任何可以匹配请求URI的资源。没有迹象表明条件是暂时或永久的。
者当没有任何其它响应可用时。
Allow头域,此头域包含以一系列对此请求资源有效的方法。
注意:HTTP/1.1服务器被准许根据请求里的接受头域会返回不可接受的响应。在一些情况下,这可能更倾向于发送一个406响应。用户代理被鼓励观察到来的响应的头域来确定此响应是否是可接受的。如果响应是不可接受的,用户代理应该暂时停止剩余数据的接收并且询问用户然后去决定进一步的动作。
请求不能完成由于和当前资源的状态冲突。此状态码只被允许出现在期望用户也许能解决此冲并且能重新提交此请求的情况下。响应主体应该包含足够的为用户认识此资源冲突的信息。理想的情况下,响应实体应该包含足够为用户或用户代理解决此问题的信息;然而,这是也许没有可能并且也没有必要。冲突最可能发生在响应PUT请求的时候。例如,如果版本被使用并且被PUT的实体包含资源的改变,而这些改变会和以前的(第三方的)请求的相冲突,那么服务器应该使用409响应去指明它不能完成此请求。在这种情况下,此响应的实体可能包含这两个版本的差异点,响应的实体格式以Content-Type头域指定。
服务器拒绝接受请求里没有包含Content-Length头域的请求。客户端可以重试此请求如果它添加了一个有效的Content-Length头域,此头域值指定了请求消息里消息主体的长度。
在一个或多个请求头域里指定的先决条件当在服务器上测试为false时返回的响应。此响应允许客户端把先决条件放放到当前资源的元信息(头域数据)之上,这样能防止请求方法被应用于一个非目的性的资源。
服务器拒绝处理请求因为请求实体太大以致达到服务器不愿意去处理。服务器可能关闭此连接去防止客户端继续请求。如果条件是暂时的,服务器应该包含一个Retry-After头域用来指明此条件是暂时的并且指明客户端应该什么时候重试。
服务器拒绝为请求服务因为此请求URI太长了以至于服务器不能解析。这种情况是很少的,只发生在当客户端POST请求不合适地转换为带有大量查询信息的GET请求时。
服务器拒绝为请求服务,因为请求的实体的格式不能被此方法的请求资源所支持。
服务器返回一个此状态码的响应,如果请求包含一个Range请求头域,并且此头域里range-specifier值没有和已选资源的当前extent值重叠,并且请求没有包含一个If-Range请求头域。(对byte-ranges来说,这意味着byte-range-spec的所有first-byte-pos值大于选择的资源的当前长度)。当此状态码响应是在byte-range请求返回时,响应应该包含一个Content-Range实体头域用来指定已选资源的当前长度。响应不能使用multipart/byteranges媒体类型。
Expect请求头域里指定的希望不能被服务器满足,或者,如果服务器是代理,那么能确定请求不能被下一站(next-hop)服务器满足。
这类状态码指明服务器处理请求时产生错误或不能处理请求。除了HEAD请求,服务器应该包含一个实体,此实体用来解释错误,和是否是暂时或长期条件。用户代理应该展示实体给用户。此响应状态码能应用于任何请求方法。
服务器遇到了一个意外条件,此条件防止服务器满足此请求。
服务器没有能力去满足请求。当服务器不能识别请求方法并且不支持它请求资源的时候,这个响应是很合适的。
此响应说明:作为网关或代理的服务器从上游(upstream)服务器接收了一个无效的响应。
由于服务器暂时地过载或维护,服务器不能处理请求。这就是说这是暂时条件,此条件将会在一些延时后被减轻。延迟的长度可以在Retry-After头域里指定。如果没有Retry-After被给,那么客户端应该处理此响应就像它处理500响应一样。
注意:503状态码的存在并不是意指服务器当产生过载时必须利用它。一些服务器可能希望拒绝此连接。
作为网关或代理的服务器在不能及时地接收一个从URI指定的上游(upstream)服务器(例如:HTTP,FTP,LDAP服务器)或者其他的辅助性服务器(例如:DNS服务器)的响应。
注意:当DNS查找超时时,一些部署的代理将会返回400或500响应。