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

    HTTP 1.1默认支持断点续传。
     
    关联header如下:
     
    Range:用于客户端到服务端的请求,可以通过改字段指定下载文件的某一段大小及其单位,字节偏移从0开始。典型格式:
        Ranges:    (unit=first byte pos)-[last byte pos]
        Ranges:    bytes=4000- 下载从第4000字节开始到文件结束部分
        Ranges:    bytes=0~N 下载第0-N字节范围的内容
        Ranges:    bytes=M-N 下载第M-N字节范围的内容
        Ranges:    bytes=-N 下载最后N字节内容
     

    If-Range:用于客户端到服务端的请求,用于判断实体是否发生改变,必须与Range配合使用。若实体未被修改,则响应所缺少的那部分;否则,响应整个新的实体。

    The If-Range HTTP request header makes a range request conditional: if the condition is fulfilled, the range request will be issued and the server sends back a 206 Partial Content answer with the appropriate body. If the condition is not fulfilled, the full resource is sent back, with a 200 OK status.

     
    Accept-Ranges:用于server到client的应答,client通过该自段判断server是否支持断点续传。
        Accept-Ranges:bytes    表示支持以bytes为单位进行传输。
        Accept-Ranges:none     表示不支持断点续传
     
    Content-Ranges:用于sever到client的应答,与Accept-Ranges在同一个报文内,通过该字段指定了返回的文件资源的字节范围。格式如下:
        Content-Ranges:bytes M-N/size 大小为size的文件的第M-N字节范围的内容
     
    关于ETag
    ETag用于标识/保证文件的唯一性、完整性,每次文件有更新该值就会变化。
     
    关于HTTP 206
    断点续传,如果返回文件的一部分,则使用HTTP 206状态码;如果返回整个文件,则使用HTTP 200响应码。

    HTTP/1.1 200 OK(不使用断点续传)

    HTTP/1.1 206 Partial Content(使用断点续传)

    HTTP/1.1 206 Partial Content

    Server: nginx/1.4.2

    Date: Fri, 20 Oct 2017 03:28:44 GMT

    Content-Type: application/octet-stream

    Content-Length: 11

    Last-Modified: Tue, 25 Aug 2015 08:56:26 GMT

    Connection: keep-alive

    ETag: "55dc2dba-14dd5b"

    Content-Range: bytes 0-10/1367387

     
    断点续传检查:
    curl -i --range 0-9 url    响应中包含Accept-Range或者Content-Ranges则表示支持。
     
    参考:
    If-Range:https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/If-Range
  • 相关阅读:
    B.Icebound and Sequence
    Educational Codeforces Round 65 (Rated for Div. 2) D. Bicolored RBS
    Educational Codeforces Round 65 (Rated for Div. 2) C. News Distribution
    Educational Codeforces Round 65 (Rated for Div. 2) B. Lost Numbers
    Educational Codeforces Round 65 (Rated for Div. 2) A. Telephone Number
    Codeforces Round #561 (Div. 2) C. A Tale of Two Lands
    Codeforces Round #561 (Div. 2) B. All the Vowels Please
    Codeforces Round #561 (Div. 2) A. Silent Classroom
    HDU-2119-Matrix(最大匹配)
    读书的感想!
  • 原文地址:https://www.cnblogs.com/amyzhu/p/8060451.html
Copyright © 2011-2022 走看看