HTTP 响应行 成功类型响应码

返回结果的 HTTP 状态码


HTTP 状态码负责表示客户端 HTTP 请求的返回结果、标记服务器端的处理是否正常、通知出现的错误等工作。让我们通过学习,好好了解一下状态码的工作机制。
 

状态码告知从服务器端返回的请求结果


状态码的职责是当客户端向服务器端发送请求时,描述返回的请求结果借助状态码,用户可以知道服务器端是正常处理了请求,还是出现了错误。

                                          图:响应的状态码可描述请求的处理结果

状态码如 200 OK,以 3 位数字和原因短语组成。

数字中的第一位指定了响应类别,后两位无分类。响应类别有以下 5 种。

表 4-1:状态码的类别  类别原因短语

  • 1XXInformational(信息性状态码)接收的请求正在处理
  • 2XXSuccess(成功状态码)请求正常处理完毕
  • 3XXRedirection(重定向状态码)需要进行附加操作以完成请求 
  • 4XXClient Error(客户端错误状态码)服务器无法处理请求
  • 5XXServer Error(服务器错误状态码)服务器处理请求出错

只要遵守状态码类别的定义,即使改变 RFC2616 中定义的状态码,或服务器端自行创建状态码都没问题。

仅记录在 RFC2616 上的 HTTP 状态码就达 40 种,若再加上 WebDAV(Web-based Distributed Authoring and Versioning,基于万维网的分布式创作和版本控制)(RFC4918、5842) 和附加 HTTP 状态码(RFC6585)等扩展,数量就达 60 余种。别看种类繁多,实际上经常使用的大概只有 14 种。接下来,我们就介绍一下这些具有代表性的 14 个状态码。  

2XX 成功


2XX 的响应结果表明请求被正常处理了。

200 OK

表示从客户端发来的请求在服务器端被正常处理了。

在响应报文内,随状态码一起返回的信息会因方法的不同而发生改变比如,使用 GET 方法时,对应请求资源的实体会作为响应返回而使用 HEAD 方法时,对应请求资源的实体首部不随报文主体作为响应返回即在响应中只返回首部,不会返回实体的主体部分)。

 204 No Content

该状态码代表服务器接收的请求已成功处理,但在返回的响应报文中不含实体的主体部分。另外,也不允许返回任何实体的主体。比如,当从浏览器发出请求处理后,返回 204 响应,那么浏览器显示的页面不发生更新。

一般在只需要从客户端往服务器发送信息,而对客户端不需要发送新信息内容的情况下使用

curl --location --request POST 'http://121.40.102.116:9000/api/qualityprofiles/add_project?language=java&qualityProfile=myjava&project=test1' \
--header 'Authorization: Basic YWRtaW46MTIzNDU2'

206 Partial Content

该状态码表示客户端进行了范围请求,而服务器成功执行了这部分的 GET 请求。响应报文中包含由 Content-Range 指定范围的实体内容。  

200 OK

状态码 200 OK 表明请求已经成功。默认情况下状态码为 200 的响应可以被缓存。不同请求方式对于请求成功的意义如下:

  • GET: 已经取得资源,并将资源添加到响应的消息体中。
  • HEAD: 响应的消息体为头部信息。
  • POST: 响应的消息体中包含此次请求的结果。
  • TRACE: 响应的消息体中包含服务器接收到的请求信息。

PUT 和 DELETE 的请求成功通常并不是响应200 OK的状态码而是 204 No Content 表示无内容(或者 201 Created表示一个资源首次被创建成功)。

 

3XX 重定向


3XX 响应结果表明浏览器需要执行某些特殊的处理以正确处理请求。

301 Moved Permanently

永久性重定向。该状态码表示请求的资源已被分配了新的 URI,以后应使用资源现在所指的URI。也就是说,如果已经把资源对应的 URI 保存为书签了,这时应该按 Location 首部字段提示的 URI 重新保存。

像下方给出的请求 URI,当指定资源路径的最后忘记添加斜杠“/”,就会产生 301 状态码。
http://example.com/sample

302 Found

临时性重定向。该状态码表示请求的资源已被分配了新的 URI,希望用户(本次)能使用新的 URI 访问。

和 301 Moved Permanently 状态码相似,但 302 状态码代表的资源不是被永久移动,只是临时性质的。换句话说,已移动的资源对应的 URI 将来还有可能发生改变。比如,用户把 URI 保存成书签,但不会像 301 状态码出现时那样去更新书签,而是仍旧保留返回 302 状态码的页面对应的 URI。

303 See Other

该状态码表示由于请求对应的资源存在着另一个 URI,应使用 GET 方法定向获取请求的资源。
303 状态码和 302 Found 状态码有着相同的功能,但 303 状态码明确表示客户端应当采用 GET 方法获取资源,这点与 302 状态码有区别。

比如,当使用 POST 方法访问 CGI 程序,其执行后的处理结果是希望客户端能以 GET 方法重定向到另一个 URI 上去时,返回 303 状态码。虽然 302 Found 状态码也可以实现相同的功能,但这里使用 303 状态码是最理想的。

本书采用的是 HTTP/1.1,而许多 HTTP/1.1 版以前的浏览器不能正确理解 303 状态码。虽然 RFC 1945 和 RFC 2068 规范不允许客户端在重定向时改变请求的方法,但是很多现存的浏览器将 302 响应视为 303 响应,并且使用 GET 方式访问在 Location 中规定的 URI,而无视原先请求的方法。所以作者说这里使用 303 是最理想的。

——译者注
当 301、302、303 响应状态码返回时,几乎所有的浏览器都会把 POST 改成 GET,并删除请求报文内的主体,之后请求会自动再次发送。
301、302 标准是禁止将 POST 方法改变成 GET 方法的,但实际使用时大家都会这么做。

307 Temporary Redirect
临时重定向。该状态码与 302 Found 有着相同的含义。尽管 302 标准禁止 POST 变换成 GET,但实际使用时大家并不遵守。

307 会遵照浏览器标准,不会从 POST 变成 GET。但是,对于处理响应时的行为,每种浏览器有可能出现不同的情况。

前面介绍了请求行的格式,这里将介绍HTTP响应当中的第一个组成部分,响应行。

响应行中的响应码分为两类,一种是100,200,300系列表示成功类型的响应码,还有400和500类型错误的响应码。

HTTP常见的错误码


  • 1xx : 服务已收到请求,请求者继续执行操作。
  • 2xx:请求成功,常见(201)
  • 3xx:请求成功,页面发生重定向(301)

HTTP响应行


图中第一部分就是响应行, 上面是完整的HTTP响应,第一行就是我们的响应行。

在响应行,第一部分是HTTP协议版本,接下来是响应码和描述信息。

响应码分类:1xx  请求已收到,需要进一步处理


响应码定义了许多的规范,这些规范可以指导我们的服务器去设计,但并不是所有的都遵循响应码中的规范,有些服务器可以定义新的响应码不在这些规范当中的。

1xx系列,表示请求被服务器接收到了,但是服务器需要做进一步的处理才能完成这个操作。

100 continue:客户端在上传一个大的文件的时候,先告诉服务器,让服务器做好准备,比如常见的迅雷下载工具。由客户端发起请求中携带 Expect: 100-continue 头部触发,服务器回100 continue表示可以传递大文件了。

101 Switch Protocols:协议升级使用,要保证HTTP 1.1协议广为使用,客户端支持更高的协议如websocket或者HTTP 2.0的时候,会在请求当中加上upgrade的头部,表示希望升级到websocket或者HTTP 2.0协议,如果服务器支持,那么返回101 Switch Protocols。
102 Processing:返回102 processing可以告诉客户端,服务器已经收到了,但是这个请求需要很长时间才能完成

响应码分类: 2xx(一)


2xx表示成功处理的请求。

201 Created: 有新资源在服务器端被成功创建。通常是我们创建了一个新的文件,比如使用put方法上传了文件,返回201表示资源在服务器端创建了。
202 Accepted:异步和有些请求需要很长时间的处理,先给客户端返回202 Accepted,由异步的任务继续去处理这个任务。

响应码分类: 2xx(二)


• 204 No Content:成功执行了请求且不携带响应包体,并暗示客户端无需更新当前的页面视图。(常见于put post等方法,上传了一些资源,但是返回告诉其不需要刷新ui等)

205 Reset Content:成功执行了请求且不携带响应包体,同时指明客户端需要更新当前页面视图。
206 Partial Content:使用 range 协议时返回部分响应内容时的响应码(断点续传都会使用range协议,只返回一部分内容的时候就会返回206响应码)
207 Multi-Status:RFC4918 ,在 WEBDAV 协议中以 XML 返回多个资源
的状态。
208 Already Reported:RFC5842 ,为避免相同集合下资源在207响应码下重复上报,使用 208 可以使用父集合的响应码。

响应码分类: 3xx(一)


• 3xx:重定向使用 Location 指向的资源或者缓存中的资源。在 RFC2068中规定客户端重定向次数不应超过 5 次,以防止死循环。

• 300 Multiple Choices:资源有多种表述,通过 300 返回给客户端后由其自行选择访问哪一种表述。由于缺乏明确的细节,300 很少使用。

• 301 Moved Permanently:资源永久性的重定向到另一个 URI 中。(使得浏览器对永久的重定向直接缓存)

• 302 Found:资源临时的重定向到另一个 URI 中。
• 303 See Other:重定向到其他资源,常用于 POST/PUT 等方法的响应中。

• 304 Not Modified:当客户端拥有可能过期的缓存时,会携带缓存的标识etag、时间等信息询问服务器缓存是否仍可复用,而304是告诉客户端可以复用缓存。(减少网络传输的数据量)

307 Temporary Redirect:类似302,但明确重定向后请求方法必须与原请求方法相同,不得变。
308 Permanent Redirect:类似301,但明确重定向后请求方法必须与原请求方法相同,不得改变。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值