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

    HTTP1.1协议(RFC2616)中定义了断点续传相关的HTTP头 Range和Content-Range字段,一个最简单的断点续传实现大概如下: 
      1)客户端下载一个1024K的文件,已经下载了其中512K 
      2)网络中断,客户端请求续传,因此需要在HTTP头中申明本次需要续传的片段: 
            Range:bytes=512000- 
            这个头通知服务端从文件的512K位置开始传输文件 
      3)服务端收到断点续传请求,从文件的512K位置开始传输,并且在HTTP头中增加: 
           Content-Range:bytes 512000-/1024000 
           并且此时服务端返回的HTTP状态码应该是206,而不是200。 

    但是在实际场景中,会出现一种情况,即在终端发起续传请求时,URL对应的文件内容在服务端已经发生变化,此时续传的数据肯定是错误的。如何解决这个问题了?显然此时我们需要有一个标识文件唯一性的方法。在RFC2616中也有相应的定义,比如实现Last-Modified来标识文件的最后修改时间,这样即可判断出续传文件时是否已经发生过改动。同时RFC2616中还定义有一个ETag的头,可以使用ETag头来放置文件的唯一标识,比如文件的MD5值。

    终端在发起续传请求时应该在HTTP头中申明If-Match 或者If-Modified-Since 字段,帮助服务端判别文件变化。 

    另外RFC2616中同时定义有一个If-Range头,终端如果在续传是使用If-Range。If-Range中的内容可以为最初收到的ETag头或者是Last-Modfied中的最后修改时候。服务端在收到续传请求时,通过If-Range中的内容进行校验,校验一致时返回206的续传回应,不一致时服务端则返回200回应,回应的内容为新的文件的全部数据。
     

    天上我才必有用,千金散尽还复来!
  • 相关阅读:
    为上次写的框架加了一个辅助功能
    复制文件夹下所有文件
    进制之间的相互转换
    c# 修改appConfig文件节点
    GUID
    太悲哀了
    poj2411 Mondriaan's Dream
    poj3311 Hie with the Pie
    HDU3001 Travelling
    luogu p2622关灯问题II
  • 原文地址:https://www.cnblogs.com/lutaishi/p/13436242.html
Copyright © 2011-2022 走看看