zoukankan      html  css  js  c++  java
  • 断点续传的原理

    其实断点续传的原理很简单,就是在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了。

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

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

  • 相关阅读:
    JOptionPane&&Exception的使用
    CppUnit在VS2010上的正确使用
    怎样认识比你优秀的人并和他们成为朋友呢?
    二十岁出头的时候上,你一无所有,你拥有一切。
    C语言实现文件复制
    关于二维数组可以开多大
    exit(0)与exit(1)、return区别
    学语言究竟学什么?
    当oracle出现 格式与字符串格式不匹配解决办法
    javascript的系统函数
  • 原文地址:https://www.cnblogs.com/Android9527/p/5412659.html
Copyright © 2011-2022 走看看