HTTP 断点续传的原理

要实现断点续传下载文件, 首先要了解断点续传的原理。 断点续传其实就是在上一次下载断开的位置开始继续下载。 HTTP 协议中, 可以在请求报文头中加入 Range 段, 来表示客户机希望从何处继续下载。 在以前版本的 HTTP 协议是不支持断点的, HTTP/1.1 开始就支持了(这也是分快传输的实现)。 一般断点下载时才用到 Range 和 Content-Range 实体头。

请求报文:
Host: 127.0.0.3
Accept: / Pragma: no-cache
Cache-Control: no-cache
Referer: http://127.0.0.3/
User-Agent: Mozilla/4.04 [en] (Win95; I ;Nav)
Range: bytes=5275648- // 告诉服务器/test.txt 这个文件从 5275648字节开始传,前面的字节不用传了

响应报文:
HTTP/1.1 206 Partial Content
Server: Zero Http Server/1.0
Date: Thu, 12 Jul 2001 11:19:40 GMT
Cache-Control: no-cache
Last-Modified: Tue, 30 Jan 2001 13:11:30 GMT
Content-Type: application/octet-stream
Content-Range: bytes 5275648-15143085/15143086
Content-Length: 9867438 Connection: close

服务器断点续传文件增强验证(If-Range,If-Match)

1.用 If-Range 进行增强校验
If-Range 中的内容可以为最初收到的 ETag 头或者是 Last-Modfied 中的最后修改时间。服务端在收到续传请求时, 通过 If-Range 中的内容进行校验, 看文件的内容是否发生了变化, 校验一致时(文件内容没有发生变化时) , 返回 206 的续传回应; 不一致时(文件的内容发生了变化) , 服务端则返回 200 回应, 回应的内容为新的文件的全部数据。

2.用 if-Match 进行增强校验与 Http 412 问题

If-Match: “40e04a44a997d11:0” //第一次获取到的 Etag 的值
如果服务器端的资源被修改了, 那么, http 请求时会发生 http 412 Precondition failed 先决条件失败, 因此, 我们建议使用 iF-Range。 这样, 即使文件被修改, 也会以 http200 返回全部资源。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值