HTTP断点续传

要实现断点续传的功能,通常都需要客户端记录下当前的下载进度,并在需要续传的时候通知服务端本次需要下载的内容片段。

HTTP1.1协议(RFC2616)中定义了断点续传相关的HTTP头 Range和Content-Range字段,一个最简单的断点续传实现大概如下:

  1. 客户端下载一个1024k的文件,已经下载了其中的512k
  2. 网络中断,客户端请求续传,因此需要在HTTP请求头中申明本次需要续传的片段
    Range:bytes=512000-
  3. 服务端收到断点续传请求,从文件的512位置开始传输,并在HTTP响应头中增加
    Content-Range:bytes 512000-/1024000

    并且此时服务端返回的HTTP状态码应该是206,而不是200。
  • 但在实际场景中,会出现一种情况,即在终端发起续传请求时,URL对应的文件内容在服务端已经发生了变化,此时续传的数据肯定时错的。
  • 如何解决这个问题?显然此时我们需要有一个标识文件唯一性的方法
  • 在RFC2616中也有相应的定义,比如实现Last-Modified来标识文件的最后修改时间,这样即可判断出续传文件时是否已经发生过改动。同时RFC2616中还定义有一个ETag的头,可以使用ETag头来放置文件的唯一标识,比如文件的MD5值。
  • 客户端在发起续传请求时应该在HTTP头中申明If-Match 或者If-Modified-Since 字段,帮助服务端判别文件变化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值