当浏览者访问一个网页时,浏览者的浏览器会向网页所在服务器发出请求。当浏览器接收并显示网页前,此网页所在的服务器会返回一个包含HTTP状态码的信息头(server header)用以响应浏览器的请求。
浏览器
HTTP状态码的英文为HTTP Status Code。下面是常见的HTTP状态码:缓存
200 – 请求成功安全
301 – 资源(网页等)被永久转移到其它URL服务器
404 – 请求的资源(网页等)不存在异步
500 – 内部服务器错误工具
HTTP状态码的分类网站
HTTP状态码由三个十进制数字组成,第一个十进制数字定义了状态码的类型,后两个数字没有分类的做用。HTTP状态码共分为5种类型:ui
分类分类描述设计
1**信息,服务器收到请求,须要请求者继续执行操做代理
2**成功,操做被成功接收并处理
3**重定向,须要进一步的操做以完成请求
4**客户端错误,请求包含语法错误或没法完成请求
5**服务器错误,服务器在处理请求的过程当中发生了错误
HTTP状态码表(版本1) 此表含状态码英文名称
状态 码状态码英文名称中文描述
1开头的状态码
100Continue继续。客户端应继续其请求
101Switching Protocols切换协议。服务器根据客户端的请求切换协议。只能切换到更高级的协议,例如,切换到HTTP的新版本协议
2开头的状态码
200OK请求成功。通常用于GET与POST请求
201Created已建立。成功请求并建立了新的资源
202Accepted已接受。已经接受请求,但未处理完成
203Non-Authoritative Information非受权信息。请求成功。但返回的meta信息不在原始的服务器,而是一个副本
204No Content无内容。服务器成功处理,但未返回内容。在未更新网页的状况下,可确保浏览器继续显示当前文档
205Reset Content重置内容。服务器处理成功,用户终端(例如:浏览器)应重置文档视图。可经过此返回码清除浏览器的表单域
206Partial Content部份内容。服务器成功处理了部分GET请求
3开头的状态码
300Multiple Choices多种选择。请求的资源可包括多个位置,相应可返回一个资源特征与地址的列表用于用户终端(例如:浏览器)选择
301Moved Permanently永久移动。请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。从此任何新的请求都应使用新的URI代替
302Found临时移动。与301相似。但资源只是临时被移动。客户端应继续使用原有URI
303See Other查看其它地址。与301相似。使用GET和POST请求查看
304Not Modified未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。客户端一般会缓存访问过的资源,经过提供一个头信息指出客户端但愿只返回在指定日期以后修改的资源
305Use Proxy使用代理。所请求的资源必须经过代理访问
306Unused已经被废弃的HTTP状态码
307Temporary Redirect临时重定向。与302相似。使用GET请求重定向
4开头的状态码
400Bad Request客户端请求的语法错误,服务器没法理解
401Unauthorized请求要求用户的身份认证
402Payment Required保留,未来使用
403Forbidden服务器理解请求客户端的请求,可是拒绝执行此请求
404Not Found服务器没法根据客户端的请求找到资源(网页)。经过此代码,网站设计人员可设置”您所请求的资源没法找到”的个性页面
405Method Not Allowed客户端请求中的方法被禁止
406Not Acceptable服务器没法根据客户端请求的内容特性完成请求
407Proxy Authentication Required请求要求代理的身份认证,与401相似,但请求者应当使用代理进行受权
408Request Time-out服务器等待客户端发送的请求时间过长,超时
409Conflict服务器完成客户端的PUT请求是可能返回此代码,服务器处理请求时发生了冲突
410Gone客户端请求的资源已经不存在。410不一样于404,若是资源之前有如今被永久删除了可以使用410代码,网站设计人员可经过301代码指定资源的新位置
411Length Required服务器没法处理客户端发送的不带Content-Length的请求信息
412Precondition Failed客户端请求信息的先决条件错误
413Request Entity Too Large因为请求的实体过大,服务器没法处理,所以拒绝请求。为防止客户端的连续请求,服务器可能会关闭链接。若是只是服务器暂时没法处理,则会包含一个Retry-After的响应信息
414Request-URI Too Large请求的URI过长(URI一般为网址),服务器没法处理
415Unsupported Media Type服务器没法处理请求附带的媒体格式
416Requested range not satisfiable客户端请求的范围无效
417Expectation Failed服务器没法知足Expect的请求头信息
5开头的状态码
500Internal Server Error服务器内部错误,没法完成请求
501Not Implemented服务器不支持请求的功能,没法完成请求
502Bad Gateway充当网关或代理的服务器,从远端服务器接收到了一个无效的请求
503Service Unavailable因为超载或系统维护,服务器暂时的没法处理客户端的请求。延时的长度可包含在服务器的Retry-After头信息中
504Gateway Time-out充当网关或代理的服务器,未及时从远端服务器获取请求
505HTTP Version not supported服务器不支持请求的HTTP协议的版本,没法完成处理
HTTP状态码列表(版本2) 此表的描述更详细些
状态码含义
100客户端应当继续发送请求。这个临时响应是用来通知客户端它的部分请求已经被服务器接收,且仍未被拒绝。客户端应当继续发送请求的剩余部分,或者若是请求已经完成,忽略这个响应。服务器必须在请求完成后向客户端发送一个最终响应。
101服务器已经理解了客户端的请求,并将经过Upgrade 消息头通知客户端采用不一样的协议来完成这个请求。在发送完这个响应最后的空行后,服务器将会切换到在Upgrade 消息头中定义的那些协议。
只有在切换新的协议更有好处的时候才应该采起相似措施。例如,切换到新的HTTP 版本比旧版本更有优点,或者切换到一个实时且同步的协议以传送利用此类特性的资源。
102由WebDAV(RFC 2518)扩展的状态码,表明处理将被继续执行。
200请求已成功,请求所但愿的响应头或数据体将随此响应返回。
201请求已经被实现,并且有一个新的资源已经依据请求的须要而创建,且其 URI 已经随Location 头信息返回。假如须要的资源没法及时创建的话,应当返回 ‘202 Accepted’。
202服务器已接受请求,但还没有处理。正如它可能被拒绝同样,最终该请求可能会也可能不会被执行。在异步操做的场合下,没有比发送这个状态码更方便的作法了。
返回202状态码的响应的目的是容许服务器接受其余过程的请求(例如某个天天只执行一次的基于批处理的操做),而没必要让客户端一直保持与服务器的链接直到批处理操做所有完成。在接受请求处理并返回202状态码的响应应当在返回的实体中包含一些指示处理当前状态的信息,以及指向处理状态监视器或状态预测的指针,以便用户可以估计操做是否已经完成。
203服务器已成功处理了请求,但返回的实体头部元信息不是在原始服务器上有效的肯定集合,而是来自本地或者第三方的拷贝。当前的信息多是原始版本的子集或者超集。例如,包含资源的元数据可能致使原始服务器知道元信息的超级。使用此状态码不是必须的,并且只有在响应不使用此状态码便会返回200 OK的状况下才是合适的。
204服务器成功处理了请求,但不须要返回任何实体内容,而且但愿返回更新了的元信息。响应可能经过实体头部的形式,返回新的或更新后的元信息。若是存在这些头部信息,则应当与所请求的变量相呼应。
若是客户端是浏览器的话,那么用户浏览器应保留发送了该请求的页面,而不产生任何文档视图上的变化,即便按照规范新的或更新后的元信息应当被应用到用户浏览器活动视图中的文档。
因为204响应被禁止包含任何消息体,所以它始终以消息头后的第一个空行结尾。
205服务器成功处理了请求,且没有返回任何内容。可是与204响应不一样,返回此状态码的响应要求请求者重置文档视图。该响应主要是被用于接受用户输入后,当即重置表单,以便用户可以轻松地开始另外一次输入。
与204响应同样,该响应也被禁止包含任何消息体,且以消息头后的第一个空行结束。
206服务器已经成功处理了部分 GET 请求。相似于 FlashGet 或者迅雷这类的 HTTP 下载工具都是使用此类响应实现断点续传或者将一个大文档分解为多个下载段同时下载。
该请求必须包含 Range 头信息来指示客户端但愿获得的内容范围,而且可能包含 If-Range 来做为请求条件。
响应必须包含以下的头部域:
Content-Range 用以指示本次响应中返回的内容的范围;若是是 Content-Type 为 multipart/byteranges 的多段下载,则每一 multipart 段中都应包含 Content-Range 域用以指示本段的内容范围。假如响应中包含 Content-Length,那么它的数值必须匹配它返回的内容范围的真实字节数。
Date
ETag 和/或 Content-Location,假如一样的请求本应该返回200响应。
Expires, Cache-Control,和/或 Vary,假如其值可能与以前相同变量的其余响应对应的值不一样的话。
假如本响应请求使用了 If-Range 强缓存验证,那么本次响应不该该包含其余实体头;假如本响应的请求使用了 If-Range 弱缓存验证,那么本次响应禁止包含其余实体头;这避免了缓存的实体内容和更新了的实体头信息之间的不一致。不然,本响应就应当包含全部本应该返回200响应中应当返回的全部实体头部域。
假如 ETag 或 Last-Modified 头部不能精确匹配的话,则客户端缓存应禁止将206响应返回的内容与以前任何缓存过的内容组合在一块儿。
任何不支持 Range 以及 Content-Range 头的缓存都禁止缓存206响应返回的内容。
207由WebDAV(RFC 2518)扩展的状态码,表明以后的消息体将是一个XML消息,而且可能依照以前子请求数量的不一样,包含一系列独立的响应代码。
300被请求的资源有一系列可供选择的回馈信息,每一个都有本身特定的地址和浏览器驱动的商议信息。用户或浏览器可以自行选择一个首选的地址进行重定向。
除非这是一个 HEAD 请求,不然该响应应当包括一个资源特性及地址的列表的实体,以便用户或浏览器从中选择最合适的重定向地址。这个实体的格式由 Content-Type 定义的格式所决定。浏览器可能根据响应的格式以及浏览器自身能力,自动做出最合适的选择。固然,RFC 2616规范并无规定这样的自动选择该如何进行。
若是服务器自己已经有了首选的回馈选择,那么在 Location 中应当指明这个回馈的 URI;浏览器可能会将这个 Location 值做为自动重定向的地址。此外,除非额外指定,不然这个响应也是可缓存的。
301被请求的资源已永久移动到新位置,而且未来任何对此资源的引用都应该使用本响应返回的若干个 URI 之一。若是可能,拥有连接编辑功能的客户端应当自动把请求的地址修改成从服务器反馈回来的地址。除非额外指定,不然这个响应也是可缓存的。
新的永久性的 URI 应当在响应的 Location 域中返回。除非这是一个 HEAD 请求,不然响应的实体中应当包含指向新的 URI 的超连接及简短说明。
若是这不是一个 GET 或者 HEAD 请求,所以浏览器禁止自动进行重定向,除非获得用户的确认,由于请求的条件可能所以发生变化。
注意:对于某些使用 HTTP/1.0 协议的浏览器,当它们发送的 POST 请求获得了一个301响应的话,接下来的重定向请求将会变成 GET 方式。
302请求的资源如今临时从不一样的 URI 响应请求。因为这样的重定向是临时的,客户端应当继续向原有地址发送之后的请求。只有在Cache-Control或Expires中进行了指定的状况下,这个响应才是可缓存的。
新的临时性的 URI 应当在响应的 Location 域中返回。除非这是一个 HEAD 请求,不然响应的实体中应当包含指向新的 URI 的超连接及简短说明。
若是这不是一个 GET 或者 HEAD 请求,那么浏览器禁止自动进行重定向,除非获得用户的确认,由于请求的条件可能所以发生变化。
注意:虽然RFC 1945和RFC 2068规范不容许客户端在重定向时改变请求的方法,可是不少现存的浏览器将302响应视做为303响应,而且使用 GET 方式访问在 Location 中规定的 URI,而无视原先请求的方法。状态码303和307被添加了进来,用以明确服务器期待客户端进行何种反应。
303对应当前请求的响应能够在另外一个 URI 上被找到,并且客户端应当采用 GET 的方式访问那个资源。这个方法的存在主要是为了容许由脚本激活的POST请求输出重定向到一个新的资源。这个新的 URI 不是原始资源的替代引用。同时,303响应禁止被缓存。固然,第二个请求(重定向)可能被缓存。
新的 URI 应当在响应的 Location 域中返回。除非这是一个 HEAD 请求,不然响应的实体中应当包含指向新的 URI 的超连接及简短说明。
注意:许多 HTTP/1.1 版之前的 浏览器不能正确理解303状态。若是须要考虑与这些浏览器之间的互动,302状态码应该能够胜任,由于大多数的浏览器处理302响应时的方式偏偏就是上述规范要求客户端处理303响应时应当作的。
304若是客户端发送了一个带条件的 GET 请求且该请求已被容许,而文档的内容(自上次访问以来或者根据请求的条件)并无改变,则服务器应当返回这个状态码。304响应禁止包含消息体,所以始终以消息头后的第一个空行结尾。
该响应必须包含如下的头信息:
Date,除非这个服务器没有时钟。假如没有时钟的服务器也遵照这些规则,那么代理服务器以及客户端能够自行将 Date 字段添加到接收到的响应头中去(正如RFC 2068中规定的同样),缓存机制将会正常工做。
ETag 和/或 Content-Location,假如一样的请求本应返回200响应。
Expires, Cache-Control,和/或Vary,假如其值可能与以前相同变量的其余响应对应的值不一样的话。
假如本响应请求使用了强缓存验证,那么本次响应不该该包含其余实体头;不然(例如,某个带条件的 GET 请求使用了弱缓存验证),本次响应禁止包含其余实体头;这避免了缓存了的实体内容和更新了的实体头信息之间的不一致。
假如某个304响应指明了当前某个实体没有缓存,那么缓存系统必须忽视这个响应,而且重复发送不包含限制条件的请求。
假如接收到一个要求更新某个缓存条目的304响应,那么缓存系统必须更新整个条目以反映全部在响应中被更新的字段的值。
305被请求的资源必须经过指定的代理才能被访问。Location 域中将给出指定的代理所在的 URI 信息,接收者须要重复发送一个单独的请求,经过这个代理才能访问相应资源。只有原始服务器才能创建305响应。
注意:RFC 2068中没有明确305响应是为了重定向一个单独的请求,并且只能被原始服务器创建。忽视这些限制可能致使严重的安全后果。
306在最新版的规范中,306状态码已经再也不被使用。
307请求的资源如今临时从不一样的URI 响应请求。因为这样的重定向是临时的,客户端应当继续向原有地址发送之后的请求。只有在Cache-Control或Expires中进行了指定的状况下,这个响应才是可缓存的。
新的临时性的URI 应当在响应的 Location 域中返回。除非这是一个HEAD 请求,不然响应的实体中应当包含指向新的URI 的超连接及简短说明。由于部分浏览器不能识别307响应,所以须要添加上述必要信息以便用户可以理解并向新的 URI 发出访问请求。
若是这不是一个GET 或者 HEAD 请求,那么浏览器禁止自动进行重定向,除非获得用户的确认,由于请求的条件可能所以发生变化。
400一、语义有误,当前请求没法被服务器理解。除非进行修改,不然客户端不该该重复提交这个请求。
二、请求参数有误。
401当前请求须要用户验证。该响应必须包含一个适用于被请求资源的 WWW-Authenticate 信息头用以询问用户信息。客户端能够重复提交一个包含恰当的 Authorization 头信息的请求。若是当前请求已经包含了 Authorization 证书,那么401响应表明着服务器验证已经拒绝了那些证书。若是401响应包含了与前一个响应相同的身份验证询问,且浏览器已经至少尝试了一次验证,那么浏览器应当向用户展现响应中包含的实体信息,由于这个实体信息中可能包含了相关诊断信息。参见RFC 2617。
402该状态码是为了未来可能的需求而预留的。
403服务器已经理解请求,可是拒绝执行它。与401响应不一样的是,身份验证并不能提供任何帮助,并且这个请求也不该该被重复提交。若是这不是一个 HEAD 请求,并且服务器但愿可以讲清楚为什么请求不能被执行,那么就应该在实体内描述拒绝的缘由。固然服务器也能够返回一个404响应,假如它不但愿让客户端得到任何信息。
404请求失败,请求所但愿获得的资源未被在服务器上发现。没有信息可以告诉用户这个情况究竟是暂时的仍是永久的。假如服务器知道状况的话,应当使用410状态码来告知旧资源由于某些内部的配置机制问题,已经永久的不可用,并且没有任何能够跳转的地址。404这个状态码被普遍应用于当服务器不想揭示到底为什么请求被拒绝或者没有其余适合的响应可用的状况下。
405请求行中指定的请求方法不能被用于请求相应的资源。该响应必须返回一个Allow 头信息用以表示出当前资源可以接受的请求方法的列表。
鉴于 PUT,DELETE 方法会对服务器上的资源进行写操做,于是绝大部分的网页服务器都不支持或者在默认配置下不容许上述请求方法,对于此类请求均会返回405错误。
406请求的资源的内容特性没法知足请求头中的条件,于是没法生成响应实体。
除非这是一个 HEAD 请求,不然该响应就应当返回一个包含可让用户或者浏览器从中选择最合适的实体特性以及地址列表的实体。实体的格式由 Content-Type 头中定义的媒体类型决定。浏览器能够根据格式及自身能力自行做出最佳选择。可是,规范中并无定义任何做出此类自动选择的标准。
407 与401响应相似,只不过客户端必须在代理服务器上进行身份验证。代理服务器必须返回一个 Proxy-Authenticate 用以进行身份询问。客户端能够返回一个 Proxy-Authorization 信息头用以验证。参见RFC 2617。
408请求超时。客户端没有在服务器预备等待的时间内完成一个请求的发送。客户端能够随时再次提交这一请求而无需进行任何更改。
409因为和被请求的资源的当前状态之间存在冲突,请求没法完成。这个代码只容许用在这样的状况下才能被使用:用户被认为可以解决冲突,而且会从新提交新的请求。该响应应当包含足够的信息以便用户发现冲突的源头。
冲突一般发生于对 PUT 请求的处理中。例如,在采用版本检查的环境下,某次 PUT 提交的对特定资源的修改请求所附带的版本信息与以前的某个(第三方)请求向冲突,那么此时服务器就应该返回一个409错误,告知用户请求没法完成。此时,响应实体中极可能会包含两个冲突版本之间的差别比较,以便用户从新提交归并之后的新版本。
410被请求的资源在服务器上已经再也不可用,并且没有任何已知的转发地址。这样的情况应当被认为是永久性的。若是可能,拥有连接编辑功能的客户端应当在得到用户许可后删除全部指向这个地址的引用。若是服务器不知道或者没法肯定这个情况是不是永久的,那么就应该使用404状态码。除非额外说明,不然这个响应是可缓存的。
410响应的目的主要是帮助网站管理员维护网站,通知用户该资源已经再也不可用,而且服务器拥有者但愿全部指向这个资源的远端链接也被删除。这类事件在限时、增值服务中很广泛。一样,410响应也被用于通知客户端在当前服务器站点上,本来属于某个我的的资源已经再也不可用。固然,是否须要把全部永久不可用的资源标记为’410 Gone’,以及是否须要保持此标记多长时间,彻底取决于服务器拥有者。
411服务器拒绝在没有定义 Content-Length 头的状况下接受请求。在添加了代表请求消息体长度的有效 Content-Length 头以后,客户端能够再次提交该请求。
412服务器在验证在请求的头字段中给出先决条件时,没能知足其中的一个或多个。这个状态码容许客户端在获取资源时在请求的元信息(请求头字段数据)中设置先决条件,以此避免该请求方法被应用到其但愿的内容之外的资源上。
413服务器拒绝处理当前请求,由于该请求提交的实体数据大小超过了服务器愿意或者可以处理的范围。此种状况下,服务器能够关闭链接以避免客户端继续发送此请求。
若是这个情况是临时的,服务器应当返回一个 Retry-After 的响应头,以告知客户端能够在多少时间之后从新尝试。
414请求的URI 长度超过了服务器可以解释的长度,所以服务器拒绝对该请求提供服务。这比较少见,一般的状况包括:
本应使用POST方法的表单提交变成了GET方法,致使查询字符串(Query String)过长。
重定向URI “黑洞”,例如每次重定向把旧的 URI 做为新的 URI 的一部分,致使在若干次重定向后 URI 超长。
客户端正在尝试利用某些服务器中存在的安全漏洞攻击服务器。这类服务器使用固定长度的缓冲读取或操做请求的 URI,当 GET 后的参数超过某个数值后,可能会产生缓冲区溢出,致使任意代码被执行[1]。没有此类漏洞的服务器,应当返回414状态码。
415对于当前请求的方法和所请求的资源,请求中提交的实体并非服务器中所支持的格式,所以请求被拒绝。
416若是请求中包含了 Range 请求头,而且 Range 中指定的任何数据范围都与当前资源的可用范围不重合,同时请求中又没有定义 If-Range 请求头,那么服务器就应当返回416状态码。
假如 Range 使用的是字节范围,那么这种状况就是指请求指定的全部数据范围的首字节位置都超过了当前资源的长度。服务器也应当在返回416状态码的同时,包含一个 Content-Range 实体头,用以指明当前资源的长度。这个响应也被禁止使用 multipart/byteranges 做为其 Content-Type。
417在请求头 Expect 中指定的预期内容没法被服务器知足,或者这个服务器是一个代理服务器,它有明显的证据证实在当前路由的下一个节点上,Expect 的内容没法被知足。
421从当前客户端所在的IP地址到服务器的链接数超过了服务器许可的最大范围。一般,这里的IP地址指的是从服务器上看到的客户端地址(好比用户的网关或者代理服务器地址)。在这种状况下,链接数的计算可能涉及到不止一个终端用户。
422从当前客户端所在的IP地址到服务器的链接数超过了服务器许可的最大范围。一般,这里的IP地址指的是从服务器上看到的客户端地址(好比用户的网关或者代理服务器地址)。在这种状况下,链接数的计算可能涉及到不止一个终端用户。
422请求格式正确,可是因为含有语义错误,没法响应。(RFC 4918 WebDAV)423 Locked
当前资源被锁定。(RFC 4918 WebDAV)
424因为以前的某个请求发生的错误,致使当前请求失败,例如 PROPPATCH。(RFC 4918 WebDAV)
425在WebDav Advanced Collections 草案中定义,可是未出如今《WebDAV 顺序集协议》(RFC 3658)中。
426客户端应当切换到TLS/1.0。(RFC 2817)
449由微软扩展,表明请求应当在执行完适当的操做后进行重试。
500服务器遇到了一个不曾预料的情况,致使了它没法完成对请求的处理。通常来讲,这个问题都会在服务器的程序码出错时出现。
501服务器不支持当前请求所须要的某个功能。当服务器没法识别请求的方法,而且没法支持其对任何资源的请求。
502做为网关或者代理工做的服务器尝试执行请求时,从上游服务器接收到无效的响应。
503因为临时的服务器维护或者过载,服务器当前没法处理请求。这个情况是临时的,而且将在一段时间之后恢复。若是可以预计延迟时间,那么响应中能够包含一个 Retry-After 头用以标明这个延迟时间。若是没有给出这个 Retry-After 信息,那么客户端应当以处理500响应的方式处理它。
注意:503状态码的存在并不意味着服务器在过载的时候必须使用它。某些服务器只不过是但愿拒绝客户端的链接。
504做为网关或者代理工做的服务器尝试执行请求时,未能及时从上游服务器(URI标识出的服务器,例如HTTP、FTP、LDAP)或者辅助服务器(例如DNS)收到响应。
注意:某些代理服务器在DNS查询超时时会返回400或者500错误
505服务器不支持,或者拒绝支持在请求中使用的 HTTP 版本。这暗示着服务器不能或不肯使用与客户端相同的版本。响应中应当包含一个描述了为什么版本不被支持以及服务器支持哪些协议的实体。
506由《透明内容协商协议》(RFC 2295)扩展,表明服务器存在内部配置错误:被请求的协商变元资源被配置为在透明内容协商中使用本身,所以在一个协商处理中不是一个合适的重点。
507服务器没法存储完成请求所必须的内容。这个情况被认为是临时的。WebDAV (RFC 4918)
509服务器达到带宽限制。这不是一个官方的状态码,可是仍被普遍使用。
510获取资源所须要的策略并无没知足。(RFC 2774)