HTTP 请求头 Range 信息

请求资源的部分内容,单位是 byte(字节),从0开始。
如果请求头携带了 Range 信息,也就是分批下载,这时候服务器会返回 206 Partial Content 的状态码及说明。

如果服务器不支持分批下载,那么会返回整个资源的大小以及状态码为200。

Range 请求头

Range: bytes=start-end

例如:

Range: bytes=10- //:从第10个字节开始到最后一个字节的数据
Range:bytes=20-39 //:从第20个字节到第39个字节之间的数据

注意:整个表示 [start, end] 是前闭后闭的,也就是包含请求头的 start 和 end。所以下次请求应该是 [end+1, nextEnd]。

Content-Range 响应头

Content-Range:bytes 0-10/3000
表示服务器返回了前(0-10)个字节的数据,总共3000字节的数据。

Content-Type 数据类型

Content-Type:image/png 表示资源类型是 png 格式的图片

Content-Length 资源的长度

Content-Length:11 表示服务器响应了11个字节的数据

Last-Modified

Last-Modified:Tue, 30 Jun 2018 03:12:48 GMT 表示资源最近被修改的时间,如果分批下载的时候发现 Last-Modified 被修改了,那么需要重新下载

ETag

ETag: W/"3103-1435633968000" 表示资源版本的标示符。通常是消息摘要(类似MD5)。分段下载时需要注意,或者缓存控制也需要注意。如果是分布式缓存系统,需要确保每台计算机的 ETag 计算规则的一致性,缓存的过期需要结合 ETag 和 Last-Modified 共同决定。

分段下载

利用 HTTP 的头信息的上述几个特点,我们可以充分利用多线程的能力。

  • 先发送一个 HEAD 方法的请求,知道总文件大小(Content-Length 就是总字节大小)
  • 多线程下载(线程1:Range:bytes=0-100,线程2:Range:bytes=100-200,…)
  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值