• 断点续传的原理


    其实断点续传的原理很简单,就是在http的请求上和一般的下载有所不同而已。

    打个比方,浏览器请求服务器上的一个文时,所发出的请求如下:

    假设服务器域名为www.jizhuomi.com/android,文件名为down.zip。

    get /down.zip http/1.1
    accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-
    excel, application/msword, application/vnd.ms-powerpoint, */*
    accept-language: zh-cn
    accept-encoding: gzip, deflate
    user-agent: mozilla/4.0 (compatible; msie 5.01; windows nt 5.0)
    connection: keep-alive

    服务器收到请求后,按要求寻找请求的文件,提取文件的信息,然后返回给浏览器,返回信息如下:

    200
    content-length=106786028
    accept-ranges=bytes
    date=mon, 30 apr 2001 12:56:11 gmt
    etag=w/"02ca57e173c11:95b"
    content-type=application/octet-stream
    server=microsoft-iis/5.0
    last-modified=mon, 30 apr 2001 12:56:11 gmt

    所谓断点续传,也就是要从文件已经下载的地方开始继续下载。所以在客户端浏览器传给web服务器的时候要多加一条信息--从哪里开始。

    下面是用自己编的一个“浏览器”来传递请求信息给web服务器,要求从2000070字节开始。

    get /down.zip http/1.0
    user-agent: netfox
    range: bytes=2000070-
    accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2

    仔细看一下就会发现多了一行 range: bytes=2000070-

    这一行的意思就是告诉服务器down.zip这个文件从2000070字节开始传,前面的字节不用传了。

    服务器收到这个请求以后,返回的信息如下:

    206
    content-length=106786028
    content-range=bytes 2000070-106786027/106786028
    date=mon, 30 apr 2001 12:55:20 gmt
    etag=w/"02ca57e173c11:95b"
    content-type=application/octet-stream
    server=microsoft-iis/5.0
    last-modified=mon, 30 apr 2001 12:55:20 gmt

    和前面服务器返回的信息比较一下,就会发现增加了一行:

    content-range=bytes 2000070-106786027/106786028

    返回的代码也改为206了,而不再是200了。

    知道了以上原理,就可以进行断点续传的编程了。

    参考资料:断点续传的原理剖析与实例讲解

  • 相关阅读:
    FTP服务总结
    编译安装hpptd2.4
    搭建DNS服务
    定制简单的Linux系统
    建立私有CA
    关于/boot文件的修复实验
    shell脚本进阶(二)
    datetime模块日期转换和列表sorted排序
    linux操作命令
    Python 中的特殊双下划线方法
  • 原文地址:https://www.cnblogs.com/Android9527/p/5412659.html
Copyright © 2020-2023  润新知