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

    断点续传一是断点,一续传。

    断点是在下载时,将下载文件分多片,同时进行多片一起下载,如果任务被暂停,暂停的位置就是断点。

    续传就是未完成的下载再次开始时,会从上次的断点继续传送。

    在下载(或上传)过程中,如果网络故障、电量不足等原因导致下载中断,这就需要使用到断点续传功能。

    下次启动时,可以从记录位置(已经下载的部分)开始,继续下载以后未下载的部分,避免重复部分的下载。断点续传实质就是能记录上一次已下载完成的位置。

    断点续传需要在下载过程中记录每条线程的下载进度;
    每次下载开始之前先读取数据库,查询是否有未完成的记录,有就继续下载,没有则创建新记录插入数据库;
    在每次向文件中写入数据之后,在数据库中更新下载进度;
    下载完成之后删除数据库中下载记录。
     
    断点续传在HTTP请求上和一般的下载有所不同,客户端浏览器传给Web服务器的时候要多加一条信息——从哪里开始(HTTP请求变量)。要实现HTTP断点续传,Web服务器必须支持HTTP/1.1(相对于HTTP/1.0老版本)。
      HTTP请求是有一个Header的,里面有个Range属性是定义下载区域的,它接收的值是一个区间范围,比如:Range:bytes=0-10000。这样我们就可以按照一定的规则,将一个大文件拆分为若干很小的部分,然后分批次的下载,每个小块下载完成之后,再合并到文件中;这样即使下载中断了,重新下载时,也可以通过文件的字节长度来判断下载的起始点,然后重启断点续传的过程,直到最后完成下载过程。
     
    参考:http://blog.csdn.net/hou_jiong/article/details/4406155
    http://blog.163.com/playkid/blog/static/562872602013326115648172/
     

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

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

        GET /down.zip HTTP/1.0 

        User-Agent: Netfront3

        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 

  • 相关阅读:
    android-自定义View
    java
    记录-常用的开发技巧
    便签:
    zTree 树形控件 ajax动态加载数据
    jquery ajax 传数据到后台乱码的处理方法
    spring + quartz 定时
    SpringMVC + Spring + MyBatis 学习笔记:提交数据遭遇基础类型和日期类型报400错误解决方法
    复制新项目 ,tomcat部署时名字还是旧项目名
    jsp 通用获取所有表单值传后台
  • 原文地址:https://www.cnblogs.com/erictanghu/p/3883615.html
Copyright © 2011-2022 走看看