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

    1. 原理

    利用了HTTP协议(http://www.ietf.org/rfc/rfc2616.txt)中的如下字段来和服务器端交互,就可以实现文件下载的断点续传:
    
    Range : 用于客户端到服务器端的请求,可通过该字段指定下载文件的某一段大小,及其单位。典型的格式如:
    Range: bytes=0-499 下载第0-499字节范围的内容
    Range: bytes=500-999  下载第500-999字节范围的内容
    Range: bytes=-500  下载最后500字节的内容
    Range: bytes=500-  下载从第500字节开始到文件结束部分的内容(这是最常用的一种格式)
    Range: bytes=0-0,-1  下载第一以及最后一个字节的内容(这个看上去有点变态...)
     
    Accept-Ranges : 用于服务器端到客户端的应答,客户端通过该字段可以判断服务器是否支持断点续传(注意RFC中注	
    	明了这一部分并不是必须的)。格式如下:
    Accept-Ranges: bytes  表示支持以bytes为单位进行传输。
    Accept-Ranges: none  表示不支持
    
    Content-Ranges : 用于服务器端到客户端的应答,与Accept-Ranges在同一个报文内,通过该字段指定了返回的文件资	源的字节范围。格式如下:
    Content-Ranges: bytes 0-499/1234  大小为1234的文件的第0-499字节范围的内容
    Content-Ranges: bytes 734-1233/1234  大小为1234字节的文件的第734-结尾范围的内容
    

    2. 例子

      请求报文:
    GET /down.zip HTTP/1.0  
    User-Agent: NetFox   
    RANGE: bytes=2000070-   
    Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2   
    
        响应报文: 206表示server端传输了请求的部分内容。
    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
  • 相关阅读:
    Android之TabHost实现Tab切换
    银联支付SDK集成
    iOS 支付 [支付宝、银联、微信]
    MySQL数据库数据类型以及INT(M)的含义
    cherrypy
    使用PyMySQL操作mysql数据库
    面向新手的Web服务器搭建(一)——IIS的搭建
    SQLite3中自增主键相关知识总结,清零的方法、INTEGER PRIMARY KEY AUTOINCREMENT和rowid的使用
    FMDB-FMDatabaseQueue
    SQLite 数据类型
  • 原文地址:https://www.cnblogs.com/Desneo/p/7214238.html