HTTP状态码详解

1. 1xx(临时响应)

表示临时响应并需要请求者继续执行操作的状态代码。

(1)100(继续):请求者应当继续提出请求。服务器返回此代码表示已收到请求的第一部分,正在等待其余部分。 

(2)101(切换协议):请求者已要求服务器切换协议,服务器已确认并准备切换。

2. 2xx(成功)

表示成功处理了请求的状态代码。

(1)200(成功):服务器已成功处理了请求。通常,这表示服务器提供了请求的网页。

(2)201(已创建):请求成功并且服务器创建了新的资源。

(3)202(已接受): 服务器已接受请求,但尚未处理。

(4)203(非授权信息):服务器已成功处理了请求,但返回的信息可能来自另一来源。

(5)204(无内容):服务器成功处理了请求,但没有返回任何内容。

(6)205(重置内容):服务器成功处理了请求,但没有返回任何内容。与204(无内容)响应不同,此响应要求请求者重置文档视图(例如清除表单内容以输入新内容)。

(7)206(部分内容):服务器成功处理了部分GET请求。

3. 3xx(重定向)

表示要完成请求,需要进一步操作。通常,这些状态代码用来重定向。

(1)300(多种选择):针对请求,服务器可执行多种操作。服务器可根据请求者(user agent)选择一项操作,或提供操作列表供请求者选择。

(2)301(永久移动):请求的网页已永久移动到新位置。服务器返回此响应(对GET或HEAD请求的响应)时,会自动将请求者转到新位置。

(3)302(临时移动):服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。

(4)303(查看其他位置):请求者应当对不同的位置使用单独的GET请求来检索响应时,服务器返回此代码。

(5)304(未修改):自从上次请求后,请求的网页未修改过。服务器返回此响应时,不会返回网页内容。

(6)305(使用代理):请求者只能使用代理访问请求的网页。如果服务器返回此响应,还表示请求者应使用代理。

(7)307(临时重定向):服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。

4. 4xx(请求错误)

这些状态代码表示请求可能出错,妨碍了服务器的处理。

(1)400(错误请求):服务器不理解请求的语法。

(2)401(未授权):请求要求身份验证。对于需要登录的网页,服务器可能返回此响应。

(3)403(禁止):服务器拒绝请求。

(4)404(未找到):服务器找不到请求的网页。

(5)405(方法禁用):禁用请求中指定的方法。

(6)406(不接受):无法使用请求的内容特性响应请求的网页。

(7)407(需要代理授权):此状态代码与401(未授权)类似,但指定请求者应当授权使用代理。

(8)408(请求超时):服务器等候请求时发生超时。

(9)409(冲突):服务器在完成请求时发生冲突。服务器必须在响应中包含有关冲突的信息。

(10)410(已删除):如果请求的资源已永久删除,服务器就会返回此响应。

(11)411(需要有效长度):服务器不接受不含有效内容长度标头字段的请求。

(12)412(未满足前提条件):服务器未满足请求者在请求中设置的其中一个前提条件。

(13)413(请求实体过大):服务器无法处理请求,因为请求实体过大,超出服务器的处理能力。

(14)414(请求的URI过长):请求的URI(通常为网址)过长,服务器无法处理。

(15)415(不支持的媒体类型):请求的格式不受请求页面的支持。

(16)416(请求范围不符合要求):如果页面无法提供请求的范围,则服务器会返回此状态代码。

(17)417(未满足期望值):服务器未满足“期望”请求标头字段的要求。

5. 5xx(服务器错误)

这些状态代码表示服务器在尝试处理请求时发生内部错误。这些错误可能是服务器本身的错误,而不是请求出错。

(1)500(服务器内部错误):服务器遇到错误,无法完成请求。

(2)501(尚未实施):服务器不具备完成请求的功能。例如,服务器无法识别请求方法时可能会返回此代码。

(3)502(错误网关):服务器作为网关或代理,从上游服务器收到无效响应。

(4)503(服务不可用):服务器目前无法使用(由于超载或停机维护)。通常,这只是暂时状态。

(5)504(网关超时):服务器作为网关或代理,但是没有及时从上游服务器收到请求。

(6)505(HTTP版本不受支持):服务器不支持请求中所用的HTTP协议版本。

6. RFC 6585发布文档描述了4个新的HTTP状态码。

HTTP协议还在变化?是的,HTTP协议一直在演变,新的状态码对于开发REST服务或者说是基于HTTP的服务非常有用,下面我们为你详细介绍这四个新的状态码以及是否应该使用。

(1)428 Precondition Required(要求先决条件)

先决条件是客户端发送HTTP请求时,如果想要请求能成功必须满足一些预设的条件。

一个好的例子就是If-None-Match头,经常在GET请求中使用,如果指定了If-None-Match,那么客户端只在响应中的ETag改变后才会重新接收回应。

先决条件的另外一个例子就是If-Match头,这个一般用在PUT请求上用于指示只更新没被改变的资源,这在多个客户端使用HTTP服务时用来防止彼此间不会覆盖相同内容。

当服务器端使用428(要求先决条件)时,表示客户端必须发送上述的请求头才能执行请求,这个方法为服务器提供一种有效的方法来阻止"lost update"问题。

(2)429 Too Many Requests(太多请求)

当你需要限制客户端请求某个服务数量时,该状态码就很有用,也就是请求速度限制。

在此之前,有一些类似的状态码,例如"509 Bandwidth Limit Exceeded"。Twitter使用420(这不是HTTP定义的状态码)。

如果你希望限制客户端对服务的请求数,可使用429(太多请求),同时包含一个Retry-After响应头用于告诉客户端多长时间后可以再次请求服务。

(3)431 Request Header Fields Too Large(请求头字段太大)

某些情况下,客户端发送HTTP请求头会变得很大,那么服务器可发送431(请求头字段太大)来指明该问题。

(4)511 Network Authentication Required(要求网络认证)

对我来说这个状态码很有趣,如果你在开发一个HTTP服务器,你不一定需要处理该状态码,但如果你在编写HTTP客户端,那这个状态码就非常重要。

如果你频繁使用笔记本和智能手机,你可能会注意到大量的公用WIFI服务要求你必须接受一些协议或者必须登录后才能使用。这是通过拦截HTTP流量,当用户试图访问网络时返回一个重定向和登录,这很讨厌,但是实际情况就是这样的。使用这些“拦截”客户端,会有一些讨厌的副作用。在RFC中有提到这两个的例子:

  • 如果你在登录WIFI前访问某个网站,网络设备将会拦截首个请求,这些设备往往也有自己的网站图标"favicon.ico"。登录后你会发现,有一段时间内你访问的网站图标一直是WIFI登录网站的图标。

  • 如果客户端使用HTTP请求来查找文档(可能是JSON),网络将会响应一个登录页,这样你的客户端就会解析错误并导致客户端运行异常,在现实中这种问题非常常见。

因此511(要求网络认证)的提出就是为了解决这个问题。

如果你正在编写HTTP的客户端,你最好还是检查511(要求网络认证)以确认是否需要认证后才能访问。

英文原文:http://www.rooftopsolutions.nl/blog/new-http-status-codes

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值