HTTP状态码(英语:HTTP Status Code)是用以表示网页服务器超文本传输协议响应状态的3位数字代码。它由 RFC 2616 规范定义的,并获得 RFC 251八、RFC 281七、RFC 229五、RFC 2774 与 RFC 4918 等规范扩展。全部状态码的第一个数字表明了响应的五种状态之一。所示的消息短语是典型的,可是能够提供任何可读取的替代方案。 除非另有说明,状态码是HTTP / 1.1标准(RFC 7231)的一部分。浏览器
HTTP状态码的官方注册表由互联网号码分配局(Internet Assigned Numbers Authority)维护。缓存
微软互联网信息服务 (Microsoft Internet Information Services)有时会使用额外的十进制子代码来获取更多具体信息,[3]可是这些子代码仅出如今响应有效内容和文档中,而不是代替实际的HTTP状态代码。安全
这一类型的状态码,表明请求已被接受,须要继续处理。这类响应是临时响应,只包含状态行和某些可选的响应头信息,并以空行结束。因为HTTP/1.0协议中没有定义任何1xx状态码,因此除非在某些试验条件下,服务器禁止向此类客户端发送1xx响应。这些状态码表明的响应都是信息性的,标示客户应该采起的其余行动。服务器
服务器已经接收到请求头,而且客户端应继续发送请求主体(在须要发送身体的请求的状况下:例如,POST请求),或者若是请求已经完成,忽略这个响应。服务器必须在请求完成后向客户端发送一个最终响应。要使服务器检查请求的头部,客户端必须在其初始请求中发送Expect: 100-continue做为头部,并在发送正文以前接收100 Continue状态代码。响应代码417指望失败表示请求不该继续。网络
服务器已经理解了客户端的请求,并将经过Upgrade消息头通知客户端采用不一样的协议来完成这个请求。在发送完这个响应最后的空行后,服务器将会切换到在Upgrade消息头中定义的那些协议。
只有在切换新的协议更有好处的时候才应该采起相似措施。例如,切换到新的HTTP版本(如HTTP/2)比旧版本更有优点,或者切换到一个实时且同步的协议(如WebSocket)以传送利用此类特性的资源。ide
WebDAV请求可能包含许多涉及文件操做的子请求,须要很长时间才能完成请求。该代码表示服务器已经收到并正在处理请求,但无响应可用。[6]这样能够防止客户端超时,并假设请求丢失。svg
这一类型的状态码,表明请求已成功被服务器接收、理解、并接受。工具
请求已成功,请求所但愿的响应头或数据体将随此响应返回。实际的响应将取决于所使用的请求方法。在GET请求中,响应将包含与请求的资源相对应的实体。在POST请求中,响应将包含描述或操做结果的实体。oop
请求已经被实现,并且有一个新的资源已经依据请求的须要而创建,且其URI已经随Location头信息返回。假如须要的资源没法及时建立的话,应当返回'202 Accepted'。[8]测试
服务器已接受请求,但还没有处理。最终该请求可能会也可能不会被执行,而且可能在处理发生时被禁止。[9]
服务器是一个转换代理服务器(transforming proxy,例如网络加速器),以200 OK状态码为起源,但回应了原始响应的修改版本。[10][11]
服务器成功处理了请求,没有返回任何内容。[12]
服务器成功处理了请求,但没有返回任何内容。与204响应不一样,此响应要求请求者重置文档视图。[13]
服务器已经成功处理了部分GET请求。相似于FlashGet或者迅雷这类的HTTP 下载工具都是使用此类响应实现断点续传或者将一个大文档分解为多个下载段同时下载。[14]
表明以后的消息体将是一个XML消息,而且可能依照以前子请求数量的不一样,包含一系列独立的响应代码。[15]
DAV绑定的成员已经在(多状态)响应以前的部分被列举,且未被再次包含。
服务器已经知足了对资源的请求,对实体请求的一个或多个实体操做的结果表示。[16]
这类状态码表明须要客户端采起进一步的操做才能完成请求。一般,这些状态码用来重定向,后续的请求地址(重定向目标)在本次响应的Location域中指明。[2]
当且仅当后续的请求所使用的方法是GET或者HEAD时,用户浏览器才能够在没有用户介入的状况下自动提交所须要的后续请求。客户端应当自动监测无限循环重定向(例如:A→B→C→……→A或A→A),由于这会致使服务器和客户端大量没必要要的资源消耗。按照HTTP/1.0版规范的建议,浏览器不该自动访问超过5次的重定向。[17]
被请求的资源有一系列可供选择的回馈信息,每一个都有本身特定的地址和浏览器驱动的商议信息。用户或浏览器可以自行选择一个首选的地址进行重定向。[18]
除非这是一个HEAD请求,不然该响应应当包括一个资源特性及地址的列表的实体,以便用户或浏览器从中选择最合适的重定向地址。这个实体的格式由Content-Type定义的格式所决定。浏览器可能根据响应的格式以及浏览器自身能力,自动做出最合适的选择。固然,RFC 2616规范并无规定这样的自动选择该如何进行。
若是服务器自己已经有了首选的回馈选择,那么在Location中应当指明这个回馈的URI;浏览器可能会将这个Location值做为自动重定向的地址。此外,除非额外指定,不然这个响应也是可缓存的。
被请求的资源已永久移动到新位置,而且未来任何对此资源的引用都应该使用本响应返回的若干个URI之一。若是可能,拥有连接编辑功能的客户端应当自动把请求的地址修改成从服务器反馈回来的地址。[19]除非额外指定,不然这个响应也是可缓存的。
新的永久性的URI应当在响应的Location域中返回。除非这是一个HEAD请求,不然响应的实体中应当包含指向新的URI的超连接及简短说明。
若是这不是一个GET或者HEAD请求,那么浏览器禁止自动进行重定向,除非获得用户的确认,由于请求的条件可能所以发生变化。
注意:对于某些使用HTTP/1.0协议的浏览器,当它们发送的POST请求获得了一个301响应的话,接下来的重定向请求将会变成GET方式。
要求客户端执行临时重定向(原始描述短语为“Moved Temporarily”)。[20]因为这样的重定向是临时的,客户端应当继续向原有地址发送之后的请求。只有在Cache-Control或Expires中进行了指定的状况下,这个响应才是可缓存的。
新的临时性的URI应当在响应的Location域中返回。除非这是一个HEAD请求,不然响应的实体中应当包含指向新的URI的超连接及简短说明。
若是这不是一个GET或者HEAD请求,那么浏览器禁止自动进行重定向,除非获得用户的确认,由于请求的条件可能所以发生变化。
注意:虽然RFC 1945和RFC 2068规范不容许客户端在重定向时改变请求的方法,可是不少现存的浏览器将302响应视做为303响应,而且使用GET方式访问在Location中规定的URI,而无视原先请求的方法。[21]所以状态码303和307被添加了进来,用以明确服务器期待客户端进行何种反应。[22]
对应当前请求的响应能够在另外一个URI上被找到,当响应于POST(或PUT / DELETE)接收到响应时,客户端应该假定服务器已经收到数据,而且应该使用单独的GET消息发出重定向。[23]这个方法的存在主要是为了容许由脚本激活的POST请求输出重定向到一个新的资源。这个新的URI不是原始资源的替代引用。同时,303响应禁止被缓存。固然,第二个请求(重定向)可能被缓存。
新的URI应当在响应的Location域中返回。除非这是一个HEAD请求,不然响应的实体中应当包含指向新的URI的超连接及简短说明。
注意:许多HTTP/1.1版之前的浏览器不能正确理解303状态。若是须要考虑与这些浏览器之间的互动,302状态码应该能够胜任,由于大多数的浏览器处理302响应时的方式偏偏就是上述规范要求客户端处理303响应时应当作的。
表示资源在由请求头中的If-Modified-Since或If-None-Match参数指定的这一版本以后,不曾被修改。在这种状况下,因为客户端仍然具备之前下载的副本,所以不须要从新传输资源。[24]
被请求的资源必须经过指定的代理才能被访问。Location域中将给出指定的代理所在的URI信息,接收者须要重复发送一个单独的请求,经过这个代理才能访问相应资源。只有原始服务器才能建立305响应。许多HTTP客户端(像是Mozilla[25]和Internet Explorer)都没有正确处理这种状态代码的响应,主要是出于安全考虑。[26]
注意:RFC 2068中没有明确305响应是为了重定向一个单独的请求,并且只能被原始服务器创建。忽视这些限制可能致使严重的安全后果。
在最新版的规范中,306状态码已经再也不被使用。最初是指“后续请求应使用指定的代理”。[27]
在这种状况下,请求应该与另外一个URI重复,但后续的请求应仍使用原始的URI。 与302相反,当从新发出原始请求时,不容许更改请求方法。 例如,应该使用另外一个POST请求来重复POST请求。[28]
请求和全部未来的请求应该使用另外一个URI重复。 307和308重复302和301的行为,但不容许HTTP方法更改。 例如,将表单提交给永久重定向的资源可能会顺利进行。[29]
这类的状态码表明了客户端看起来可能发生了错误,妨碍了服务器的处理。除非响应的是一个HEAD请求,不然服务器就应该返回一个解释当前错误情况的实体,以及这是临时的仍是永久性的情况。这些状态码适用于任何请求方法。浏览器应当向用户显示任何包含在此类错误响应中的实体内容。[30]
若是错误发生时客户端正在传送数据,那么使用TCP的服务器实现应当仔细确保在关闭客户端与服务器之间的链接以前,客户端已经收到了包含错误信息的数据包。若是客户端在收到错误信息后继续向服务器发送数据,服务器的TCP栈将向客户端发送一个重置数据包,以清除该客户端全部还未识别的输入缓冲,以避免这些数据被服务器上的应用程序读取并干扰后者。
因为明显的客户端错误(例如,格式错误的请求语法,太大的大小,无效的请求消息或欺骗性路由请求),服务器不能或不会处理该请求。[31]
参见:HTTP基本认证、HTTP摘要认证
相似于403 Forbidden,401语义即“未认证”,即用户没有必要的凭据。[32]该状态码表示当前请求须要用户验证。该响应必须包含一个适用于被请求资源的WWW-Authenticate信息头用以询问用户信息。客户端能够重复提交一个包含恰当的Authorization头信息的请求。[33]若是当前请求已经包含了Authorization证书,那么401响应表明着服务器验证已经拒绝了那些证书。若是401响应包含了与前一个响应相同的身份验证询问,且浏览器已经至少尝试了一次验证,那么浏览器应当向用户展现响应中包含的实体信息,由于这个实体信息中可能包含了相关诊断信息。
注意:当网站(一般是网站域名)禁止IP地址时,有些网站状态码显示的401,表示该特定地址被拒绝访问网站。
该状态码是为了未来可能的需求而预留的。该状态码最初的意图可能被用做某种形式的数字现金或在线支付方案的一部分,但几乎没有哪家服务商使用,并且这个状态码一般不被使用。若是特定开发人员已超过请求的每日限制,Google Developers API会使用此状态码。[34]
主条目:HTTP 403
服务器已经理解请求,可是拒绝执行它。与401响应不一样的是,身份验证并不能提供任何帮助,并且这个请求也不该该被重复提交。若是这不是一个HEAD请求,并且服务器但愿可以讲清楚为什么请求不能被执行,那么就应该在实体内描述拒绝的缘由。固然服务器也能够返回一个404响应,假如它不但愿让客户端得到任何信息。
主条目:HTTP 404
请求失败,请求所但愿获得的资源未被在服务器上发现,但容许用户的后续请求。[35]没有信息可以告诉用户这个情况究竟是暂时的仍是永久的。假如服务器知道状况的话,应当使用410状态码来告知旧资源由于某些内部的配置机制问题,已经永久的不可用,并且没有任何能够跳转的地址。404这个状态码被普遍应用于当服务器不想揭示到底为什么请求被拒绝或者没有其余适合的响应可用的状况下。
请求行中指定的请求方法不能被用于请求相应的资源。该响应必须返回一个Allow头信息用以表示出当前资源可以接受的请求方法的列表。例如,须要经过POST呈现数据的表单上的GET请求,或只读资源上的PUT请求。
鉴于PUT,DELETE方法会对服务器上的资源进行写操做,于是绝大部分的网页服务器都不支持或者在默认配置下不容许上述请求方法,对于此类请求均会返回405错误。
参见:内容协商
请求的资源的内容特性没法知足请求头中的条件,于是没法生成响应实体,该请求不可接受。[36]
除非这是一个HEAD请求,不然该响应就应当返回一个包含可让用户或者浏览器从中选择最合适的实体特性以及地址栏表的实体。实体的格式由Content-Type头中定义的媒体类型决定。浏览器能够根据格式及自身能力自行做出最佳选择。可是,规范中并无定义任何做出此类自动选择的标准。
与401响应相似,只不过客户端必须在代理服务器上进行身份验证。[37]代理服务器必须返回一个Proxy-Authenticate用以进行身份询问。客户端能够返回一个Proxy-Authorization信息头用以验证。
请求超时。根据HTTP规范,客户端没有在服务器预备等待的时间内完成一个请求的发送,客户端能够随时再次提交这一请求而无需进行任何更改。[38]
表示由于请求存在冲突没法处理该请求,例如多个同步更新之间的编辑冲突。
表示所请求的资源再也不可用,将再也不可用。当资源被有意地删除而且资源应被清除时,应该使用这个。在收到410状态码后,用户应中止再次请求资源。[39]但大多数服务端不会使用此状态码,而是直接使用404状态码。
服务器拒绝在没有定义Content-Length头的状况下接受请求。在添加了代表请求消息体长度的有效Content-Length头以后,客户端能够再次提交该请求。[40]
服务器在验证在请求的头字段中给出先决条件时,没能知足其中的一个或多个。[41]这个状态码容许客户端在获取资源时在请求的元信息(请求头字段数据)中设置先决条件,以此避免该请求方法被应用到其但愿的内容之外的资源上。
前称“Request Entity Too Large”,表示服务器拒绝处理当前请求,由于该请求提交的实体数据大小超过了服务器愿意或者可以处理的范围。[42]此种状况下,服务器能够关闭链接以避免客户端继续发送此请求。
若是这个情况是临时的,服务器应当返回一个Retry-After的响应头,以告知客户端能够在多少时间之后从新尝试。
前称“Request-URI Too Long”,[43]表示请求的URI长度超过了服务器可以解释的长度,所以服务器拒绝对该请求提供服务。一般将太多数据的结果编码为GET请求的查询字符串,在这种状况下,应将其转换为POST请求。[44]这比较少见,一般的状况包括:
本应使用POST方法的表单提交变成了GET方法,致使查询字符串过长。
重定向URI“黑洞”,例如每次重定向把旧的URI做为新的URI的一部分,致使在若干次重定向后URI超长。
客户端正在尝试利用某些服务器中存在的安全漏洞***服务器。这类服务器使用固定长度的缓冲读取或操做请求的URI,当GET后的参数超过某个数值后,可能会产生缓冲区溢出,致使任意代码被执行[45]。没有此类漏洞的服务器,应当返回414状态码。
对于当前请求的方法和所请求的资源,请求中提交的互联网媒体类型并非服务器中所支持的格式,所以请求被拒绝。例如,客户端将图像上传格式为svg,但服务器要求图像使用上传格式为jpg。
前称“Requested Range Not Satisfiable”。[46]客户端已经要求文件的一部分(Byte serving),但服务器不能提供该部分。例如,若是客户端要求文件的一部分超出文件尾端。[47]
417 Expectation Failed
在请求头Expect中指定的预期内容没法被服务器知足,或者这个服务器是一个代理服显的证据证实在当前路由的下一个节点上,Expect的内容没法被知足。[48]
本操做码是在1998年做为IETF的传统愚人节笑话, 在RFC 2324超文本咖啡壶控制协议'中定义的,并不须要在真实的HTTP服务器中定义。当一个控制茶壶的HTCPCP收到BREW或POST指令要求其煮咖啡时应当回传此错误。[49]这个HTTP状态码在某些网站(包括Google.com)与项目(如Node.js、ASP.NET和Go语言)中用做彩蛋。[50]
Twitter Search与Trends API在客户端被限速的状况下返回。
该请求针对的是没法产生响应的服务器(例如由于链接重用)。[51]
请求格式正确,可是因为含有语义错误,没法响应。[15]
当前资源被锁定。[15]
因为以前的某个请求发生的错误,致使当前请求失败,例如PROPPATCH。[15]
在WebDAV Advanced Collections Protocol中定义,但Web Distributed Authoring and Versioning (WebDAV) Ordered Collections Protocol中并不存在。
客户端应当切换到TLS/1.0,并在HTTP/1.1 Upgrade header中给出。[15]
原服务器要求该请求知足必定条件。这是为了防止“‘未更新’问题,即客户端读取(GET)一个资源的状态,更改它,并将它写(PUT)回服务器,但这期间第三方已经在服务器上更改了该资源的状态,所以致使了冲突。”[52]
用户在给定的时间内发送了太多的请求。旨在用于网络限速。[52]
服务器不肯处理请求,由于一个或多个头字段过大。[52]
Nginx上HTTP服务器扩展。服务器不向客户端返回任何信息,并关闭链接(有助于阻止恶意软件)。
这是一个由Windows家庭控制(Microsoft)HTTP阻止的450状态代码的示例,用于信息和测试。
主条目:HTTP 451
该访问因法律的要求而被拒绝,由IETF在2015核准后新增长。[53][54][55]
在错误代码431提出以前Nginx上使用的扩展HTTP代码。
表示服务器没法完成明显有效的请求。[56]这类状态码表明了服务器在处理请求的过程当中有错误或者异常状态发生,也有多是服务器意识到以当前的软硬件资源没法完成对请求的处理。除非这是一个HEAD请求,不然服务器应当包含一个解释当前错误状态以及这个情况是临时的仍是永久的解释信息实体。浏览器应当向用户展现任何在当前响应中被包含的实体。这些状态码适用于任何响应方法。[57]
通用错误消息,服务器遇到了一个不曾预料的情况,致使了它没法完成对请求的处理。没有给出具体错误信息。[58]
服务器不支持当前请求所须要的某个功能。当服务器没法识别请求的方法,而且没法支持其对任何资源的请求。[59](例如,网络服务API的新功能)
做为网关或者代理工做的服务器尝试执行请求时,从上游服务器接收到无效的响应。[60]
因为临时的服务器维护或者过载,服务器当前没法处理请求。这个情况是暂时的,而且将在一段时间之后恢复。[61]若是可以预计延迟时间,那么响应中能够包含一个Retry-After头用以标明这个延迟时间。若是没有给出这个Retry-After信息,那么客户端应当以处理500响应的方式处理它。
做为网关或者代理工做的服务器尝试执行请求时,未能及时从上游服务器(URI标识出的服务器,例如HTTP、FTP、LDAP)或者辅助服务器(例如DNS)收到响应。[62]
注意:某些代理服务器在DNS查询超时时会返回400或者500错误。
服务器不支持,或者拒绝支持在请求中使用的HTTP版本。[63]这暗示着服务器不能或不肯使用与客户端相同的版本。响应中应当包含一个描述了为什么版本不被支持以及服务器支持哪些协议的实体。
由《透明内容协商协议》(RFC 2295)扩展,表明服务器存在内部配置错误,[64]被请求的协商变元资源被配置为在透明内容协商中使用本身,所以在一个协商处理中不是一个合适的重点。
服务器没法存储完成请求所必须的内容。这个情况被认为是临时的。[15]
服务器在处理请求时陷入死循环。 (可代替 208状态码)
获取资源所须要的策略并无被知足。[65]
客户端须要进行身份验证才能得到网络访问权限,旨在限制用户群访问特定网络。(例如链接WiFi热点时的强制网络门户)[52]
听说早期 Twitter API 会在短时间内提交太多需求的时候回传这个 Status Code,不过在新版 API 改成使用 429 Too Many Requests。
这两个是之前一个叫作 ArcGIS for Server 的系统会回应的 Status Code。通常来讲验证信息错误仍是会回传 401 Unathorized。
Cloudflare 会用的未知错误。
指目标服务器挂了