最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

如何基于SpringMVC實現斷點續(xù)傳(HTTP)

 更新時間:2020年01月11日 15:43:43   作者:松鼠的博客  
這篇文章主要介紹了如何基于SpringMVC實現斷點續(xù)傳(HTTP),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

這篇文章主要介紹了如何基于SpringMVC實現斷點續(xù)傳(HTTP),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

一、概述

所謂斷點續(xù)傳,其實只是指下載,也就是要從文件已經下載的地方開始繼續(xù)下載。在以前版本的HTTP協議是不支持斷點的,HTTP/1.1開始就支持了。一般斷點下載時才用到Range和Content-Range實體頭。HTTP協議本身不支持斷點上傳,需要自己實現。

二、Range

用于請求頭中,指定第一個字節(jié)的位置和最后一個字節(jié)的位置,一般格式:

Range:用于客戶端到服務端的請求,可以通過改字段指定下載文件的某一段大小及其單位,字節(jié)偏移從0開始。典型格式:

  • Ranges: (unit=first byte pos)-[last byte pos]
  • Ranges: bytes=4000- 下載從第4000字節(jié)開始到文件結束部分
  • Ranges: bytes=0~N 下載第0-N字節(jié)范圍的內容
  • Ranges: bytes=M-N 下載第M-N字節(jié)范圍的內容
  • Ranges: bytes=-N 下載最后N字節(jié)內容

1.以下幾點需要注意:

(1)這個數據區(qū)間是個閉合區(qū)間,起始值是0,所以“Range: bytes=0-1”這樣一個請求實際上是在請求開頭的2個字節(jié)。

(2)“Range: bytes=-200”,它不是表示請求文件開始位置的201個字節(jié),而是表示要請求文件結尾處的200個字節(jié)。

(3)如果last byte pos小于first byte pos,那么這個Range請求就是無效請求,server需要忽略這個Range請求,然后回應一個200,把整個文件發(fā)給client。

(4)如果last byte pos大于等于文件長度,那么這個Range請求被認為是不能滿足的,server需要回應一個416,Requested range not satisfiable。

2.示例解釋:

表示頭500個字節(jié):bytes=0-499

表示第二個500字節(jié):bytes=500-999

表示最后500個字節(jié):bytes=-500

表示500字節(jié)以后的范圍:bytes=500-

第一個和最后一個字節(jié):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- 或不用這個頭

一般正?;貞?/p>

HTTP/1.1 200 OK 
Content-Length: 801   
Content-Type: application/octet-stream 
Content-Range: bytes 0-800/801 //801:文件總大小

一個最簡單的斷點續(xù)傳實現大概如下:

1.客戶端下載一個1024K的文件,已經下載了其中512K

2. 網絡中斷,客戶端請求續(xù)傳,因此需要在HTTP頭中申明本次需要續(xù)傳的片段:

Range:bytes=512000-

這個頭通知服務端從文件的512K位置開始傳輸文件

3. 服務端收到斷點續(xù)傳請求,從文件的512K位置開始傳輸,并且在HTTP頭中增加:

Content-Range:bytes 512000-/1024000

并且此時服務端返回的HTTP狀態(tài)碼應該是206,而不是200。

但是在實際場景中,會出現一種情況,即在終端發(fā)起續(xù)傳請求時,URL對應的文件內容在服務端已經發(fā)生變化,此時續(xù)傳的數據肯定是錯誤的。如何解決這個問題了?顯然此時我們需要有一個標識文件唯一性的方法。在RFC2616中也有相應的定義,比如實現Last-Modified來標識文件的最后修改時間,這樣即可判斷出續(xù)傳文件時是否已經發(fā)生過改動。同時RFC2616中還定義有一個ETag的頭,可以使用ETag頭來放置文件的唯一標識,比如文件的MD5值。

終端在發(fā)起續(xù)傳請求時應該在HTTP頭中申明If-Match 或者If-Modified-Since 字段,幫助服務端判別文件變化。

另外RFC2616中同時定義有一個If-Range頭,終端如果在續(xù)傳是使用If-Range。If-Range中的內容可以為最初收到的ETag頭或者是Last-Modfied中的最后修改時候。服務端在收到續(xù)傳請求時,通過If-Range中的內容進行校驗,校驗一致時返回206的續(xù)傳回應,不一致時服務端則返回200回應,回應的內容為新的文件的全部數據。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • SPRINGBOOT讀取PROPERTIES配置文件數據過程詳解

    SPRINGBOOT讀取PROPERTIES配置文件數據過程詳解

    這篇文章主要介紹了SPRINGBOOT讀取PROPERTIES配置文件數據過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-12-12
  • java調用shell腳本及注意事項說明

    java調用shell腳本及注意事項說明

    這篇文章主要介紹了java調用shell腳本及注意事項說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • 一文吃透 Spring 中的 AOP 編程

    一文吃透 Spring 中的 AOP 編程

    這篇文章主要介紹了springboot中的AOP編程,本文介紹的非常詳細,有一定的參考價值,感興趣的小伙伴可以借鑒一下
    2023-04-04
  • java實現文件的斷點續(xù)傳

    java實現文件的斷點續(xù)傳

    這篇文章主要為大家詳細介紹了java實現文件的斷點續(xù)傳,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • Java多線程Runable售票系統(tǒng)實現過程解析

    Java多線程Runable售票系統(tǒng)實現過程解析

    這篇文章主要介紹了Java多線程Runable售票系統(tǒng)實現過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-06-06
  • java8中l(wèi)amba表達式的使用

    java8中l(wèi)amba表達式的使用

    這篇文章主要介紹了java8中l(wèi)amba表達式的使用,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-02-02
  • SpringBoot實現RBAC權限校驗模型的示例

    SpringBoot實現RBAC權限校驗模型的示例

    本文主要介紹了SpringBoot實現RBAC權限校驗模型的示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2025-04-04
  • java三個環(huán)境變量配置簡單教程

    java三個環(huán)境變量配置簡單教程

    這篇文章主要為大家詳細介紹了java三個環(huán)境變量配置簡單教程,配置path變量、配置classpath變量、最后是配置JAVA_HOME變量,感興趣的小伙伴們可以參考一下
    2016-07-07
  • mybatis-plus雪花算法自動生成機器id原理及源碼

    mybatis-plus雪花算法自動生成機器id原理及源碼

    Mybatis-Plus是一個Mybatis的增強工具,它在Mybatis的基礎上做了增強,卻不做改變,Mybatis-Plus是為簡化開發(fā)、提高開發(fā)效率而生,但它也提供了一些很有意思的插件,比如SQL性能監(jiān)控、樂觀鎖、執(zhí)行分析等,下面一起看看mybatis-plus雪花算法自動生成機器id原理解析
    2021-06-06
  • Java虛擬機啟動過程探索

    Java虛擬機啟動過程探索

    當我們在編寫Java應用的時候,很少會注意Java程序是如何被運行的,如何被操作系統(tǒng)管理和調度的,帶著好奇心,探索一下Java虛擬機啟動過程
    2022-05-05

最新評論

万荣县| 天柱县| 蒙自县| 灵寿县| 镇赉县| 商南县| 肥乡县| 巴中市| 邮箱| 金溪县| 汝南县| 中阳县| 临颍县| 疏勒县| 通许县| 东安县| 渝北区| 镇原县| 永和县| 灵山县| 陆川县| 兰溪市| 三河市| 克什克腾旗| 锦屏县| 麻城市| 迭部县| 武鸣县| 怀远县| 开原市| 额尔古纳市| 盐山县| 渭南市| 资溪县| 平泉县| 古浪县| 增城市| 海宁市| 青冈县| 天祝| 呈贡县|