HTTP响应状态代码指示特定HTTP请求是否成功完成。状态代码由RFC2616第10节定义。响应分为五类:1xx:信息2xx:成功3xx:重定向4xx:客户端错误5xx:服务器错误一般故障排除提示使用网络浏览器测试网络服务器时,刷新更改服务器后的浏览器获取有关服务器如何处理请求的更多详细信息。例如,Apache或Nginx等Web服务器会生成两个名为access.log和error.log的文件,可以扫描这些文件以获取相关信息。请记住:HTTP状态代码定义是服务请求的应用程序实现的标准的一部分。这意味着返回的实际状态代码取决于服务器软件如何处理特定错误-本指南通常应该为您指明正确的方向一些常见的状态代码是:1xx(临时响应)指示临时响应并需要的状态代码请求者继续。此类状态码表示请求已被接受,需要进一步处理。这种类型的响应只包含一个状态行和一些可选的响应头信息,并以一个空行结束。由于HTTP/1.0协议中没有定义1xx状态码,因此除非在某些实验条件下,服务器禁止向此类客户端发送1xx响应。100(继续):到目前为止一切都是有效的,客户端应该继续请求,如果已经完成则忽略它。服务器已收到请求标头,客户端应继续发送请求主体(在需要发送主体的请求的情况下:例如POST请求),或者如果请求已经完成则忽略响应。服务器必须在请求完成后向客户端发送最终响应。为了让服务器检查请求的标头,客户端必须在其初始请求中发送Expect:100-continue作为标头,并在发送文字之前接收到100Continue状态代码。101(切换协议):此代码是响应客户端的升级标头而发送的,表示服务器也在切换协议。服务器已经理解了客户端的请求,会通过Upgrade消息头通知客户端使用不同的协议来完成请求。发送此响应的最后一个空行后,服务器将切换到升级标头中定义的那些协议。只有在切换到新协议有益时才应采取类似措施。例如,切换到新的HTTP版本(如HTTP/2)比旧版本具有优势,或者切换到实时和同步协议(如WebSocket)以提供利用这些特性的资源。102Processing(WebDAV;RFC2518):一个WebDAV请求可能包含很多涉及文件操作的子请求,需要很长时间才能完成请求。此代码表示服务器已收到并正在处理请求,但没有响应可用。这可以防止客户端超时并假设请求丢失。103EarlyHints:此状态代码主要用于与Link标头一起使用,以允许用户代理在服务器仍在准备响应时开始预加载资源。2xx(成功)表示请求已被服务器成功接收、理解和接受。200(Success):请求成功,请求所期望的响应头或数据体将与本次响应一起返回。成功的含义取决于HTTP方法:GET:消息文本中已获取并传输资源。HEAD:实体标题在消息正文中。POST:描述操作结果的资源在消息正文中传输。TRACE:消息正文包含服务器收到的请求消息201(CREATED):请求成功,新资源由此创建。这通常是POST请求或某些PUT请求后返回的响应。202(已接受):服务器已接受请求但尚未处理。最终请求可能会或可能不会被执行,并且在它发生时可能会禁止处理。例如:不能及时创建所需的资源。203(非授权信息)(自HTTP/1.1起):服务器已成功处理请求,但返回的信息可能来自其他来源。204(NoContent):服务器成功处理了请求,没有返回任何内容。205(重置内容):服务器成功处理了请求,但没有返回任何内容。但与204响应不同,返回此状态代码的响应需要请求者重置文档视图。此响应主要用于在接受用户输入后立即重置表单,以便用户可以轻松地开始另一次输入。与204响应一样,该响应也禁止包含任何消息体,并以消息头后的第一个空行结束。206(部分内容):服务器成功处理了部分GET请求。实现断点续传或将一个大文件分解成多个下载段同时下载。例如:视频播放时的数据加载请求。请求必须包含一个Range标头以指示客户端期望的内容范围,并且可以包含一个If-Range作为请求条件。207(多态):WebDAV(RFC2518)扩展的状态码,表示后续的消息体将是一个XML消息,根据之前的子请求的个数,可能包含一系列独立的响应码。208(已报告)(WebDAV;RFC5842):在DAV中使用:propstat响应元素以避免重复枚举同一集合的多个绑定的内部成员。226(已使用IM)(RFC3229):服务器已完成对资源的GET请求,响应表示应用于当前实例的一个或多个实例操作的结果。3xx(重定向)表示需要进一步操作才能完成请求。表示需要进一步操作才能完成请求。通常,这些状态代码用于重定向。当且仅当后续请求使用的方法是GET或HEAD时,用户浏览器可以自动提交所需的后续请求,无需用户干预。客户端应该自动检测重定向的无限循环(例如:A→B→C→...→A或A→A),因为这会在服务器端和客户端造成大量不必要的资源消耗。按照HTTP/1.0规范的建议,浏览器不应自动遵循5个以上的重定向。300(MultipleChoices):请求的资源有一系列备选响应,每个响应都有自己的特定地址和浏览器驱动的协商信息。用户或浏览器可以选择首选地址进行重定向。如果服务器本身有首选反馈选项,则应在Location中指定反馈的URI;浏览器可以使用这个Location值作为自动重定向的地址。此外,除非另有说明,否则此响应也是可缓存的。301(永久删除):请求的页面已永久移动到新位置。当服务器返回此响应(响应GET或HEAD请求)时,它会自动将请求者转发到新位置。如果可能,具有链接编辑功能的客户端应自动将请求的地址更改为从服务器返回的地址。除非另有说明,否则此响应也是可缓存的。应在响应的Location字段中返回新的永久URI。除非这是一个HEAD请求,否则响应的主体应该包含一个指向新URI的超链接和一个简短的描述。如果这不是GET或HEAD请求,浏览器将禁止自动重定向,除非用户确认,因为请求的条件可能会相应改变。对于一些使用HTTP/1.0协议的浏览器,当它们发送的POST请求得到301响应时,接下来的重定向请求就会变成GET方法。302(临时移动):服务器目前正在响应来自不同位置的网页的请求,但是请求者应该继续使用原来的位置进行以后的请求。仅当在Cache-Control或Expires中指定时,响应才可缓存。应在响应的Location字段中返回新的临时URI。除非这是一个HEAD请求,否则响应的主体应该包含一个指向新URI的超链接和一个简短的描述。如果这不是GET或HEAD请求,那么除非用户确认,否则浏览器将禁止自动重定向,因为请求的条件可能会相应改变。虽然RFC1945和RFC2068规范不允许客户端在重定向时改变请求方式,但是现有的很多浏览器都把302响应当作303响应,使用GET方式访问Location中指定的URI,忽略原来的请求方法。所以添加了状态码303和307来指定服务器期望从客户端得到什么响应。303(看别处):可以在另一个URI找到对当前请求的响应,客户端应该GET到该资源。此方法的存在主要是为了允许将脚本激活的POST请求的输出重定向到新资源。同时,不得缓存303响应。当然,第二个请求(重定向)可能会被缓存。应在响应的Location字段中返回新的URI。除非这是一个HEAD请求,否则响应的主体应该包含一个指向新URI的超链接和一个简短的描述。许多HTTP/1.1之前的浏览器不能正确理解303状态。如果需要考虑与这些浏览器的交互,302状态码应该可以胜任,因为大多数浏览器处理302响应的方式正是上述规范要求客户端在处理303响应时所做的。304(NotModified):表示资源没有因为请求头指定的版本If-Modified-Since或If-None-Match而被修改。在这种情况下,不需要重新传输资源,因为客户端仍然有先前下载的副本。304响应不能包含消息正文,因此它总是以标题后的第一个空行结束。305(使用代理):请求的资源必须通过指定的代理才能访问。Location字段会给出指定代理的URI信息,接收方需要重复发送单独的请求通过这个代理访问相应的资源。只有原始服务器可以构建305响应。RFC2068中没有明确表示305响应是为了重定向单个请求,并且只能由源服务器创建。忽略这些限制可能会导致严重的安全后果。306(临时重定向):在最新版本的规范中,不再使用306状态码。307(临时重定向):请求的资源现在暂时响应来自不同URI的请求。由于这种重定向是暂时的,客户端应该继续向原始地址发送未来的请求。仅当在Cache-Control或Expires中指定时,响应才可缓存。308(永久重定向):这意味着资源现在永久位于由Location:HTTPResponse标头指定的另一个URI。这意味着该资源现在永久位于Location:HTTPResponse标头指定的另一个URI中。这与301MovedPermanentlyHTTP响应代码具有相同的语义,除了用户代理不能更改使用的HTTP方法:如果在第一个请求中使用POST,则必须在第二个请求中使用它。4xx(客户端错误)表示请求可能出了问题,导致服务器无法处理它。这些状态代码表明客户端似乎遇到了错误,阻止了服务器的处理。除非响应是一个HEAD请求,否则服务器应该返回一个实体来解释当前的错误情况,以及这是暂时的还是永久的情况。如果错误发生时客户端正在传输数据,则使用TCP的服务器实现应注意确保客户端在关闭客户端与服务器之间的连接之前已收到包含错误信息的数据包。如果客户端收到错误信息后继续向服务端发送数据,服务端的TCP栈会向客户端发送一个reset包,清除客户端所有无法识别的输入缓冲区,防止这些数据在服务端被服务端读取.应用程序读取并干扰后者。400(BadRequest):由于明显的客户端错误,服务器不能或不会处理请求。语义不正确,服务器无法理解当前请求。除非修改,否则客户不应重新提交此请求。请求参数错误。例如:传递的参数的数据结构对于请求格式不正确。如:由于浏览器故障、请求格式错误、参数数据量过大、无效请求报文或欺骗性路由请求,导致与网站关联的用户cookie损坏。清除浏览器的缓存和cookie可以解决问题由于人为错误导致的恶意代码请求手动形成HTTP请求时(例如,使用curl错误)401(未授权):请求需要身份验证。服务器可能会为需要登录的网页返回此响应。当前请求需要用户身份验证。响应必须包括适用于请求用户信息的请求资源的WWW-Authenticate标头。客户端可以使用适当的授权标头重新提交请求。如果当前请求已经包含授权证书,那么401响应意味着服务器验证拒绝了这些证书。如果401响应包含与前一个响应相同的身份验证质询,并且浏览器至少尝试过一次身份验证,则浏览器应该向用户显示响应中包含的实体信息,因为该实体信息可能包含相关的诊断信息。注意:当一个网站(一般是网站域名)禁止某个IP地址时,有些网站会显示401状态码,表示拒绝该地址访问该网站。402(需要付款):此响应代码保留供将来使用,最初是为在数字支付系统中使用而创建的,但目前未使用。如果特定开发人员超过每日请求限制,GoogleDevelopersAPI将使用此状态代码。403(禁止访问):服务器已理解请求,但拒绝执行请求。与401响应不同,身份验证没有帮助,并且不应重复请求。如果这不是HEAD请求,并且服务器希望能够解释为什么请求无法完成,那么应该在实体中描述拒绝的原因。当然,如果服务器不想让客户端获取任何信息,也可以返回404响应。禁止执行访问。禁止读取访问。禁止写访问。需要SSL。需要SSL128。IP地址被拒绝。需要客户端证书。站点访问被拒绝。用户太多。配置无效。密码更改。拒绝访问映射表。客户端证书被吊销。拒绝目录列表。超出客户端访问许可。客户端证书不受信任或无效。客户端证书已过期或尚未生效。无法在当前应用程序池中执行请求的URL。无法为此应用程序池中的客户端执行CGI。护照登录失败。404(NotFound):请求失败,在服务器上没有找到请求的资源。没有信息告诉用户这种情况是暂时的还是永久的。如果服务器知道这种情况,它应该使用410状态码来告知旧资源由于某些内部配置机制问题而永久不可用,没有地址可以跳转。当服务器不想透露请求被拒绝的原因或没有其他合适的响应可用时,404状态代码被广泛使用。资源链接中是否有拼写错误?用户是否键入了错误的URL?该文件是否存在于服务器上的正确位置?资源是否已在服务器上移动或删除?服务器配置是否具有正确的文档根位置?拥有Web服务器工作进程的用户是否有权遍历到请求文件所在的目录?(提示:目录需要读取和执行权限才能访问)访问的资源是符号链接吗?如果是,请确保Web服务器配置为遵循符号链接405(MethodForbidden):请求行中指定的请求方法(post、get、put、delete等)不能用于请求相应的资源。响应必须返回一个Allow标头,指示当前资源接受的请求方法列表。由于PUT和DELETE方法会写入服务器上的资源,所以大多数Web服务器在默认配置下不支持或不允许上述请求方法,此类请求将返回405错误。406((NotAccepted)):请求资源的内容特征不能满足请求头中的条件,因此无法生成响应实体。除非这是一个HEAD请求,否则响应应该返回一个包含实体属性和地址列表的实体,用户或浏览器可以从中选择最合适的。实体的格式由Content-Type标头中定义的媒体类型决定。浏览器可以根据格式和自身能力做出自己的最佳选择。然而,该规范并未定义进行此类自动选择的任何标准。407((ProxyAuthorizationRequired)):类似于401响应,除了客户端必须在代理服务器上进行身份验证。代理服务器必须为身份质询返回一个Proxy-Authenticate。客户端可以返回用于身份验证的Proxy-Authorization标头。408((RequestTimedOut)):请求超时。客户端没有在服务器准备等待的时间内完成发送请求。客户端可以随时重新提交此请求而不做任何更改。409(冲突):由于与所请求资源的当前状态发生冲突,请求无法完成。仅当用户被认为能够解决冲突并将重新提交新请求时才允许使用此代码。响应应该包含足够的信息让用户发现冲突的来源。例如:多个同时更新之间的编辑冲突。410(已删除):请求的资源在服务器上不再可用,并且没有已知的转发地址。这种情况应该被认为是永久性的。如果可能,具有链接编辑功能的客户端在获得用户许可后应删除对该地址的所有引用。如果服务器不知道或不能确定条件是否永久,则应使用404状态代码。除非另有说明,否则此响应是可缓存的。411(需要有效长度):服务器拒绝接受没有定义Content-Length标头的请求。添加一个有效的Content-Length标头指示请求消息体的长度后,客户端可以重新提交请求。412(前提条件失败):服务器在验证时未能满足请求标头字段中给出的一个或多个前提条件。该状态码允许客户端在获取资源时在请求的元信息(请求头字段数据)中设置前置条件,以防止请求方法被应用到它期望的内容以外的资源上。413(请求实体太大):服务器拒绝处理当前请求,因为请求提交的实体数据的大小超出了服务器愿意或能够处理的范围。在这种情况下,服务器可以关闭连接以防止客户端继续发送此请求。如果条件是暂时的,服务器应该返回一个Retry-After响应头来告诉客户端多长时间后再试一次。414(请求的URI太长):请求的URI长于服务器可以解释的长度,因此服务器拒绝为该请求提供服务。本来应该使用POST方法的表单提交变成了GET方法,导致查询字符串(QueryString)过长。重定向URI“黑洞”,例如每次重定向都将旧URI作为新URI的一部分,导致多次重定向后URI过长。客户端试图通过利用某些服务器中的安全漏洞来攻击服务器。这种类型的服务器使用固定长度的缓冲区来读取或操作请求的URI。当GET后的参数超过一定值时,可能会发生缓冲区溢出,导致任意代码执行。415(Unsupportedmediatype):对于当前请求的方法和请求的资源,请求中提交的实体不是服务器支持的格式,因此请求被拒绝。416(请求范围不符合要求)(RFC7233):如果请求中包含Range请求头,并且Range中指定的任何数据范围与当前资源的可用范围不一致,则请求没有定义一个If-Range请求头。417(ExpectationNotMet):此响应代码表示服务器无法满足Expect请求标头字段指示的期望。418(I'mateapot)(RFC2324):此操作码在RFC2324HypertextCoffeePotControlProtocol中定义为1998年IETF的传统愚人节笑话,不需要在真正的HTTP服务器定义中.控制茶壶的HTCPCP在接收到煮咖啡的BREW或POST命令时应返回此错误。此HTTP状态代码在某些网站(包括Google.com)和项目(例如Node.js、ASP.NET和Go语言)中用作彩蛋。420(保持冷静):Twitter搜索和趋势API在客户端速率受限时返回。421(错误请求)(RFC7540):向无法产生响应的服务器发出请求。这可以由未配置为响应请求URI中包含的方案和权限组合的服务器发送。422(不可处理的实体)(WebDAV;RFC4918):请求格式正确,但由于语义错误而无法遵循。423(已锁定)(WebDAV;RFC4918):正在访问的资源已锁定。424(从属)(WebDAV;RFC4918):此请求失败,因为先前的请求失败。425(太早):服务器不愿意冒可能重放请求的风险。如:安全验证未完成。426(需要升级)(RFC2817):服务器拒绝使用当前协议执行请求,但如果客户端升级到不同的协议,则可能愿意这样做。428(需要先决条件)(RFC6585):源服务器要求请求是有条件的。旨在防止“丢失更新”问题,客户端获取资源状态,修改该状态并将其返回给服务器,而第三方修改服务器上的状态,从而导致冲突。429(请求太多)(RFC6585):用户在给定时间内发送了太多请求(“请求速率限制”)。431(Requestheaderistoolarge)(RFC6585):服务器不愿意处理请求,因为它的请求头字段太大(RequestHeaderFieldsTooLarge)。减小请求头字段的大小后,可以重新提交请求。444(无响应):Nginx上的HTTP服务器扩展。服务器不向客户端返回任何内容并关闭连接(有助于防止恶意软件)。450(被Windows家长控制阻止):这是一个450状态代码被Windows家庭控制(Microsoft)HTTP阻止的示例,用于提供信息和测试目的。451(因法律原因不可用):用户请求了非法资源,例如一个被政府审查的网页。5xx(服务器错误)表示服务器在尝试处理请求时遇到内部错误。这类状态码是指服务器在处理请求的过程中出现错误或异常状态,也可能是服务器意识到以当前的软硬件资源无法完成对请求的处理。除非这是一个HEAD请求,否则服务器应该包含一个ExplanationMessage实体来解释当前的错误状态以及该条件是暂时的还是永久的。浏览器应该向用户显示当前响应中包含的任何实体。这些状态代码适用于任何响应方法。500(内部服务器错误):一般错误消息,服务器遇到意外情况,无法完成请求的处理。导致此错误的最常见原因是服务器配置错误(例如,格式错误的.htaccess文件)或缺少包(例如在没有正确安装PHP的情况下尝试执行PHP文件)。501(notyetimplemented):服务器不支持请求方式,无法处理。只有GET和HEAD需要服务器支持,不能返回此错误码。502(BadGateway):这意味着服务器的网关或代理服务器没有从实际上应该完成请求的后端服务器收到有效响应。如果问题服务器是反向代理服务器,例如负载均衡器,则需要检查以下内容:后端服务器(HTTP请求转发到的服务器)正常并且反向代理配置正确,指定适当的后端后端服务器和反向代理服务器之间的网络连接正常。如果服务器可以在其他端口上通信,请确保防火墙允许它们之间的流量使用):表示服务器过载或正在维护。此错误意味着该服务应该在某个时候可用。请注意,与此响应一起,应发送一个解释问题的用户友好页面。此响应应用于临时条件,并且Retry-After:HTTP标头应包含恢复服务之前的估计时间(如果可能)。网站管理员还必须注意与此响应一起发送的与缓存相关的标头,因为通常不应缓存这些短暂的条件响应。如果服务器不在维护中,这可能表明服务器没有足够的CPU或内存资源来处理所有传入请求,或者Web服务器需要配置为允许更多用户、线程或进程504(网关超时):当服务器作为网关时,无法及时得到响应时返回该错误码。服务器之间的网络连接不良后端服务器性能不佳,完成请求太慢网关或代理服务器超时时间太短505(不支持HTTP版本):请求中使用的HTTP协议不支持服务器版本。506(协商引起的异常)(RFC2295):请求的透明内容协商导致循环引用。507(存储不足)(WebDAV;RFC4918):服务器无法存储满足请求所需的内容。这种情况被认为是暂时的。508(循环检测)(WebDAV;RFC5842):服务器在处理请求时陷入无限循环。可替代208状态码510(扩展不足)(RFC2774):尚未满足获取资源所需的策略,客户端需要进一步扩展请求,服务器才能执行。服务器用发出延期请求所需的所有信息回复客户端。511(NetworkAuthenticationRequired)(RFC6585):客户端需要进行身份验证才能获得网络访问权限,旨在限制用户组访问特定网络。示例:连接到WiFi热点时的强制门户参考链接MDNHTTP响应代码
