【图解HTTP】(五)多部分对象集合是什么?范围请求的功能?

【图解HTTP】(五)多部分对象集合是什么?范围请求的功能?

一、多部份对象集合

在发送请求时,发送的一份报文主体内可能包含有多种类型的数据(实体),比如图片、文本文件等。
HTTP协议采纳了多部份对象集合,在HTTP报文中使用多部分对象集合可以实现传输多种类型数据的功能。
多部分对象集合里的对象包含以下2种:

  • multipart/from-data
  • multipart/byteranges

1、multipart/form-data

在Web表单文件上传时使用。
下面是一个使用了该多部分对象的请求报文的例子:

Content-Type: multipart/form-data; boundary=AaB03x
--AaB03x
Content-Disposition: form-data; name="field1"
Joe Blow
--AaB03x
Content-Disposition: form-data; name="pics"; filename="file1.txt"
Content-Type: text/plain
...(file1.txt的数据)...
--AaB03x--

2、multipart/byteranges

当客户端发起多重范围请求时,服务器端成功响应,并返回状态码为206的响应报文,该响应报文包含多个范围的内容时会使用multipart/byteranges
下面是一个响应报文的例子:

HTTP/1.1206 Partial Content
Date: Fri, 13 Jul 2012 02:45:26 GMT
Last-Modified: Fri, 31 Aug 2007 02:02:20 GMT
Content-Type: multipart/byteranges; boundary=THIS_STRING_SEPARATES
--THIS_STRING_SEPARATES
Content-Type: application/pdf
Content-Range: bytes 500-999/8000
...(范围指定的数据)...
--THIS_STRING_SEPARATES
Content-Type: application/pdf
Content-Range: bytes 7000-7999/8000
...(范围指定的数据)...
--THIS_STRING_SEPARATES--

在HTTP报文(请求报文或响应报文)中使用多部分对象集合时,需要在首部字段里加上Content-type,并且还要使用 boundary 字符串来分隔多部分对象集合指明的各类实体。
在各个实体的起始行之前,分隔字符串前面要加上--标记,例如--AaB03x
在多部分对象集合的最后,分隔字符串前后都要加上--标记,例如--AaB03x--,具体的可以看看前面两个例子就明白了。
多部分对象集合的每个部分类型中都可以含有首部字段,且在某个部分中可以嵌套使用多部分对象集合。

二、范围请求

范围请求的功能是获取资源的部分内容。那么为什么要需要获取资源部分内容的功能呢?
以前,网络的带宽没有现在的那么高速,在当时,下载一个稍微大点的文件或图片十分吃力,而且还很容易出现网络中断的情况,这时就必须重头开始下载。为了解决这个问题,我们需要一种可恢复的机制,即从之前下载中断处恢复下载。
要实现该功能就要求能够指定下载的实体范围,于是就有了用于指定范围的请求,即范围请求。(Range Request)
例如,对于一份10000字节大小的资源,如果使用范围请求,可以只请求5001~10000字节内的资源,如下图所示:
在这里插入图片描述
如上图所示,执行范围请求时,需要使用首部字段Range指定资源的byte范围。
如上图请求中Range: bytes=5001 - 10000指定了从5001字节到10000字节范围的数据。
再举一个例子,指定5001字节之后的全部数据:Range: bytes=5001 - ,当然.
还可以指定多重范围:
Range: bytes=-3000 , 5000 - 7000 指定了从一开始到3000字节和5000到7000字节。

针对范围请求,响应会返回状态码206 Particial Content的响应报文。对于多重范围的范围请求,响应会在首部字段标明Content-Type: multipart/byteranges
如果服务器无法响应范围请求,则返回状态码200 Ok完整的实体内容

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前端corner

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值