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

    一、概述
     
    所谓断点续传,其实只是指下载,也就是要从文件已经下载的地方开始继续下载。在以前版本的HTTP协议是不支持断点的,HTTP/1.1开始就支持了。一般断点下载时才用到Range和Content-Range实体头。HTTP协议本身不支持断点上传,需要自己实现。
     
    二、Range 
     
    用于请求头中,指定第一个字节的位置和最后一个字节的位置,一般格式:
     
    Range:bytes=[first byte pos]-[last byte pos] 
     
    1.以下几点需要注意:
    (1)这个数据区间是个闭合区间,起始值是0,所以“Range: bytes=0-1”这样一个请求实际上是在请求开头的2个字节。
    (2)“Range: bytes=-200”,它不是表示请求文件开始位置的201个字节,而是表示要请求文件结尾处的200个字节。
    (3)如果last byte pos小于first byte pos,那么这个Range请求就是无效请求,server需要忽略这个Range请求,然后回应一个200,把整个文件发给client。
    (4)如果last byte pos大于等于文件长度,那么这个Range请求被认为是不能满足的,server需要回应一个416,Requested range not satisfiable。
     
    2.示例解释:
    表示头500个字节:bytes=0-499  
    表示第二个500字节:bytes=500-999  
    表示最后500个字节:bytes=-500  
    表示500字节以后的范围:bytes=500-  
    第一个和最后一个字节:bytes=0-0,-1  
    同时指定几个范围:bytes=500-600,601-999 
     
    三、Content-Range
     
    用于响应头,指定整个实体中的一部分的插入位置,他也指示了整个实体的长度。在服务器向客户返回一个部分响应,它必须描述响应覆盖的范围和整个实体长度。一般格式: 
     
    Content-Range: bytes (unit first byte pos) - [last byte pos]/[entity legth] 
     
    四、Header示例
     
    请求下载整个文件: 
     
    GET /test.rar HTTP/1.1 
    Connection: close 
    Host: 116.1.219.219 
    Range: bytes=0-801 //一般请求下载整个文件是bytes=0- 或不用这个头
     
    一般正常回应 
     
    HTTP/1.1 200 OK 
    Content-Length: 801      
    Content-Type: application/octet-stream 
    Content-Range: bytes 0-800/801 //801:文件总大小
  • 相关阅读:
    记一次oracle新建用户及分配指定表权限的操作记录
    [转]word中不显示mathtype公式,只显示方框,双击后可以再mathtype里面看到公式
    C、C++成员变量对齐
    include头文件:C++标准库与C标准库
    [转]本专业部分国际会议及刊物影响因子排名
    使用Winbase.h
    [转]printf 字符串格式化
    1.6.2如何使用位逻辑运算(例如与、或、位移)来实现位向量?
    文章中图表自动编号
    取样问题 总数n事先不知道,等概率取样 (编程珠玑chapter12 课后题10)
  • 原文地址:https://www.cnblogs.com/OIMM/p/9144798.html
Copyright © 2011-2022 走看看