HTTP状态码

HTTP协议版本:1.1

Http状态码可以分为5类

1XX  :用于告知客户端应当执行的动作

2XX :用于表示各种类型的请求成功

3XX :用于告知文件已经转移,以及后续处理方法

4XX :用于指出客户端的各种错误

5XX :用于指出服务端的各种错误

100 continue(继续)

该状态码告知客户端已经接受到了他发送过来的初步请求,并要求客户端将余下的请求内容发送过来。此后当服务端接收到所有请求时必须发送一个结束继续请求的回应。

101 switching Protocols(替换协议)

服务端已经理解客户端的请求,并将通过UPGRADE消息头告知客户端采用哪种协议。当最后通过空行终止这次响应后,服务端也将把协议替换为UPGRADE消息头中定义的协议。

理论上每次使用101状态都是因为新的协议更加有优势例如通过一个实时同步的协议以更好的传输资源.

200 OK(成功)

告知客户端请求成功.

201 created(成功创建)

告知客户端请求已经被满足,且有一个新的资源生成。新资源的请求地址将会放置在Location消息头中。服务端的响应应当包含可以帮助用户或机构准确获取指定资源的特征或地址。服务器必须在返回201状态码前生成资源,如果不能立刻生成资源,则应该返回状态码202。

202 accepted (请求已经接受)

告知客户端请求已经接受了,正在处理中。而且服务端不能保证处理一定成功。使用202状态码时,服务端在接受到请求后,可以立刻反馈,而不需要直到结果出现。服务端响应时理论上应当告知客户端任务的可能执行时间或该任务状态监控器的指针。

203 Non-Authoritative Information (返回内容不可靠)

告知客户端响应中反馈的元数据并不是直接从最初的服务器获取,而是使用了本地或第三方机构的缓存。

204 No Content (不需要返回内容)

告知客户端服务端已经成功处理了请求,且不会返回实体信息。服务端可能会在响应的消息头中提供新增或更新的元信息。消息头中的信息应当是和客户端的请求相呼应的。

由于204状态码禁止响应中存在消息体,所以在响应时消息头后要直接以空行结尾。

205 Reset Content(重置内容)

告知客户端请求已经接受且已经成功处理,且应当刷新发出请求的页面视图。该响应主要为了用户输入内容后,可以将结果清晰的反馈给用户,方便用户进行下一次输入。

与204状态码类似,响应中禁止出现消息体,所以在响应时消息头后要直接以空行结尾

206 Partial Content (返回部分内容)

告知客户端服务器已经处理了对指定资源的某一部分的GET请求。对于该状态码,要求客户端的请求必须包含Range头部域并告知想要获取指定资源的哪一部分。最好还包含If-Range头部域作为请求条件。对于服务器的响应中必须包含以下消息头:

1.一个指明返回内容属于那一部分的Content-Range头部域或者Content-Type为multipart/byteranges的多段下载。如果还包含Content-Length头部域,则他的值应当和消息体中的实际内容长度保持一致。

2.Date日期信息

3.如果是相同的请求则返回200状态码,然后给出ETag或Content-Loaction(也可以一起给)

4.如果当前的响应内容和之前相同请求的响应内容不一致,则需要给出Expires,Cache-Control,Vary(这些内容可以一起给,也可以单独给)

对于If-Range的一个强校验请求,响应不应包含其他实体头;对于If-Range的一个弱校验请求,响应中禁止包含其他实体头。这是为了避免更新头和实体缓存之间的不一致。否则本次响应必须给出响应状态码为200时的所有实体头。

假如ETag和Last-Modified不匹配,则客户端应当禁止将206返回的内容与之前返回的内容合并在一起。

任何不支持缓存Range和Content-Range头的缓存,禁止缓存状态码为206的响应内容

300 Multiple Choices (多重选择)

被请求的资源有一系列符合的指向,每个信息都有自己特定的地址和浏览器驱动的商议信息。用户可以从这些指向中选择一个适合的进行重定向。

响应中的应包含一个能帮助用户或浏览器找到期望资源的特征和地址的列表,除非用户发出的是一个HEAD请求。实体的格式在Content-Type头中设置。根据格式和浏览器的能力,这个选择过程可以自动进行。

如果服务器已经有了一个适合的选择,那么它应当将对应的访问地址放入位置域中,以便浏览器自动跳转。这次响应的结果是允许缓存的,除非指明不需要。

301 Moved Permanently (永久转移)

被请求的资源已经永久转移至新的地址,未来对该资源的任意引用都应该使用本次响应反馈的若干个URI之一。如果可能的话,有地址编辑能力的客户端应该自动将地址替换为服务端返回的一个或多个URI。此次响应的结果是允许缓存的,除非指明不需要。

新的访问URI应该放入本次响应的位置域中。在响应的实体中应当包括指向新URI的超链接和说明,除非请求是HEAD请求。

如果请求不是GET或HEAD,则对于状态码为301的响应,浏览器禁止进行自动跳转,除非已获得了用户的确认。因为这会改变请求的条件。

注意:对于某些使用了HTTP1.0/的浏览器,通过301状态码获取的POST请求会被转化为一个GET请求。

302 Found (找到?)

被请求的资源临时转移至了一个新的地址,由于地址之后可能再次发生变化,客户端应继续使用旧的地址进行请求。此次请求只有Cache-Control或Expires头域被使用的情况下才能允许缓存。

临时地址应当放在响应的位置域中。响应的实体中应当包含指向新URI的超链接和说明,除非本次请求是HEAD请求。

如果请求不是GET或HEAD,则对于状态码为302的响应,浏览器禁止进行自动跳转,除非已获得了用户的确认。因为这会改变请求的条件。

303 See Other (其他选择)

此次请求的响应可以在另外一个URI上找到,客户端应当采用GET的方式访问那个资源。这是为了允许浏览器跳转至由脚本激活的POST请求获取的资源。这个新的URI不是原始请求资源的替代者。状态码为303的响应禁止缓存,但是由第一次请求触发的第二次请求的响应允许缓存。另外一个URI应当放入响应的位置域中。响应的实体中应当包含指向新URI的超链接和说明。

304 Not Modified (未修改)

当客户端带请求被接受了,但是服务端发现文档没有更改过,此时服务端应当发送304状态码。304响应禁止包含消息体,并且在头域后直接以空行结束。

响应必须包含以下头域:

1.Date,除非服务器没有时钟。如果没有时钟的服务器也打算遵守这些规则,那么代理服务器和客户端可以自行将Date加入响应头中,使得缓存逻辑可以正常运行。

2.ETag,Content-Location(至少包含其中一个),对于本来应当返回200状态码的同样请求时(本次不能返回200,需要返回304)。

3.Expires,Cache-Control,Vary(至少包含其中一个),对于值域和之前相同变量下的响应不同时。

如果带参数的GET是强校验的,那么响应不应该包含其他头域;如果带参数的GET是弱校验的,那么响应禁止包含其他头域。这是为了避免缓存了的实体内容和更新的实体头信息之前出现不一致。

加入某个状态码为304的响应声明一个实体内容当前没有缓存,那么缓存系统必须忽略这个响应,然后重复发送没有参数的请求。

如果一个缓存系统接收了一个状态码为304的响应,并打算以此更新当前的缓存实体,那么缓存系统必须更新这个实体在响应中的所有域值。

305 Use Proxy (使用代理)

被请求的资源必须通过指定的代理才能被访问。在响应的位置域中给出的是代理服务器的URI。接受者被认为会不断重复发送这种需要使用代理的请求。只有原始服务器才能创建状态码为305的响应。

306  (不再使用)

307 Temporary Redirect (短期跳转)

被请求的资源临时转移至了一个新的地址,由于地址之后可能再次发生变化,客户端应继续使用旧的地址进行请求。此次请求只有Cache-Control或Expires头域被使用的情况下才能允许缓存。

临时地址应当放在响应的位置域中。响应的实体中应当包含指向新URI的超链接和说明,除非本次请求是HEAD请求。因为许多HTTP/1.1之前的的浏览器不能识别307状态码,所以在说明中应当包含必要信息以便用户向新的地址发起请求。

如果请求不是GET或HEAD,则对于状态码为307的响应,浏览器禁止进行自动跳转,除非已获得了用户的确认。因为这会改变请求的条件。

400 Bad Request (失败的请求)

因为语法问题,此次请求不能被理解。客户端应当修改后再重新请求。

401 Unauthorized(未验证)

此次请求需要用户验证。响应中必须包含WWW-authenticate头域,用于询问用户消息。客户端可以重复提交一个包含适当Authoriztion头域的请求。如果请求中已经包含了Authorization证书,那么在状态码为401的响应表示这些证书被拒绝。如果服务器的响应中包含了与前一个响应相同的身份验证询问,且浏览器已经至少一次尝试了验证,那么浏览器应当将响应中的实体展示出来,因为响应中的信息可能包含了相关的诊断信息。

402 Payment Required(支付)

预留状态

403 Forbidden(禁止访问)

服务器已经理解了本次请求,但是不能实现它。无需进行验证,也无需重复请求。如果请求不是HEAD的话,服务器会在实体中描述拒绝访问的原因。如果服务器不打算描述拒绝原因,那么应该使用404状态码作为替代。

404 Not Found(未找到)

服务器通过请求中的URI找不到匹配的资源。没有迹象表示这是暂时的还是永久的。如果服务器通过某些机制知道资源已经永远不能使用,且没有之后的请求地址,那么应当返回410状态码。如果服务器不打算描述请求为何被拒绝,或没有其他合适的响应时,会使用状态码404.

405 Mehod Not Allowed(方法不允许访问)

请求中指定的方法不允许访问请求要求获取的资源。响应中必须包含可以获取该资源的方法列表。

406 Not Acceptable (不能接受)

请求资源的内容特性无法满足请求头中的条件,因为不能生成响应实体

响应中应当包含可以访问资源的内容特性和位置列表,以便用户和浏览器选择合适的一个,除非本次请求是HEAD请求。实体的格式在Content-Type头域中定义。根据格式和浏览器的能力,浏览器可以自动作出合适的选择。但是规范中没有定义任何作出此类自动选择的标准。

如果浏览器接受的响应的状态码为406,那么浏览器应当终止获取更多数据的行为,并询问用户应该如何处理。

407 Proxy Authentication Required (代理服务器验证)

该状态码和401相似,但是客户端必须在代理服务器上进行身份验证。代理服务器必须返回Proxy-Authenticate头域,包含一个想代理服务器请求资源的邀请。客户端应当重复发送有Proxy-Authenicate的请求。

408 Request Time Out(请求超时)

客户端不能在规定时间内提供一个请求。客户端过一段时间后应当重复发送一个相同的请求

409 Conflict (冲突)

由于和资源的当前状态存在冲突,请求不能被完成。如果服务器认为用户可以处理冲突,且会再次提交时,会发送409状态码的响应。响应中应当包含足够多的信息,帮助用户发现冲突的原因。在理想情况下响应中会包含足够多的信息帮助用户和浏览器修复问题,然而这是不太可能,且不能期望的。

冲突大部分是因为PUT请求导致的。例如,在采用版本检查的情况下,PUT请求中的修改和之前的一个请求出现冲突,此时服务器会给出状态码为409的响应,声明请求无法完成。此时,响应实体中应当包含两个版本中的差异列表,并在Content-Type头域中给出格式。

410 Gone(丢失)

请求的资源无法通过服务器拿到,且没有可供跳转的地址。这个情况被认为是永久的。当客户端接收到请求后应当删除这个资源的URI地址。如果服务器不知道或无法确定这个状况是永久的,那么应该使用404状态码。该响应允许缓存,出声明不需要。

410响应主要目的是帮助网站管理人员维护网站,当资源被删除时接受通知。这类事件在限时,增值服务中很普遍。同样,410响应也被用于通知客户端在当前服务器节点上,原本属于某个人的资源已经不再可用。当然是否需要把所有不可用的资源标记为‘410Gone’,以及保持此标记多久,完全取决于服务器拥有者。

411 Length Required(需要长度)

服务器拒绝接受请求,因为Content-Length没有被给出。客户端需要给出一个可用的Content-Length头域,内容应该符合请求消息体的长度。

412 Precondition Failed (先决条件错误)

服务器无法验证通过请求头域中给出的先决条件。该状态码允许客户端获取资源时在请求的元信息设置先决条件,以避免该请求方法被应用到其他资源上。

413 Request Entity Too Large (请求实体太大)

服务端拒绝处理客户端的请求,因为请求实体的大小超过了服务器的处理能力。服务端会关闭此次连接,以避免客户端继续请求。

如果这个情况是暂时的,服务器应当包含一个Retry-After头域,声明这是暂时的,客户端过一段时间后可以尝试再次请求。

414 Request-URI Too Long (请求URI太长)

服务器拒绝处理请求,因为请求URI长度超过了服务器的可以解析的能力。这种情况一般出现在:

1.一个POST请求转为GET请求,导致查询字符串过长

2.或者客户端进入了URI“黑洞”(例如每次重定向都把旧地址作为新地址的一部分,在若干次重定向后导致URI过长)

3.客户端正在尝试利用某些服务器中存在的安全漏洞攻击服务器。这类服务器使用固定长度的缓冲读取或操作URI,当GET后的参数超过某个数值后,可能会产生缓冲溢出,导致任意代码被执行。没有此类漏洞的服务器可返回414状态码

415 Unsupported Media Type(请求格式错误)

对于请求的资源和请求的方法,请求实体的格式不是服务所支持的格式,所以服务器拒绝请求

416 Request Range Not Satisfiable (请求范围错误)

如果请求中包含Range请求头域,并且range中指定的的数据范围和现有的数据资源不匹配,同时请求中没有包含If-Range请求头,那么服务器就应当返回416状态码。

如果这个状态码被返回给一个byte-range请求,那么响应中应当包含Content-Range实体头域指明当前资源的长度范围。该响应禁止使用mutipart/byteranges作为其Content-Type

417 Exceptation Failed (预期错误)

在Except请求域给出的内容不能被服务器满足。或者这个服务器是一个代理服务器,它有明显的的证据证明在当前路由的下一个节点上Except中的内容无法被满足.

500 Internal Server Error (服务器错误)

服务器遇到了一个无法预料的错误,导致无法完成请求

501 Not Implemented(服务器不支持该功能)

服务器不支持当前请求所需要的某个功能。此状态码在服务器无法识别请求的方法,且无法支持其对资源的任何请求

502 Bad Gateway (错误的网关)

扮演网关或代理服务器的服务器,接受到了一个来自上游服务的错误响应。

503 Service Unavailable (服务器无法服务)

服务器当前无法处理请求,可能是临时出现负载或者正在进行维护。该状态码暗示这是一个临时的状态,过一会儿可能就会恢复正常。如果知道问题的持续时间,在响应中会给出Retry-After请求头。如果没有给出Retry-After请求头,那么给出状态500的状态码更加合适。

注意:503状态码并不是暗示服务一定处于负载的状态,有时服务器只是想简单的拒绝访问。

504 Gateway Timeout(网关超时)

扮演网关和代理服务器不能及时获取上游服务器(URI标示出的服务器,例如HTTP,FTP,LDAP)或者辅助服务器(如CDN)的响应。

注意:某些代理服务器在CDN查询超时时会返回400或500状态码

505 Http Version Not Supported(当前Http协议版本不支持)

服务器不支持或拒绝支持请求中使用的HTTP版本。这暗示服务器不能或者不愿更改HTTP版本以和客户端保持一致。在响应中应当包含一个实体描述不支持该版本的原因,以及该服务器支持哪些HTTP版本。

参考中文翻译地址: https://zh.wikipedia.org/wiki/HTTP%E7%8A%B6%E6%80%81%E7%A0%81

参考英文原版地址: https://tools.ietf.org/html/rfc2616#page-70

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值