日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

http大文件传输

發布時間:2024/3/26 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 http大文件传输 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

隨著科技的發展網絡傳輸的資源越來越大,從幾k到幾M,幾G。因此網絡傳輸壓力越來越大。

由此http有了解決,大文件傳輸的方法:

  • 數據壓縮傳輸,可以將大文件進行壓縮傳輸通過Accept-Encoding和Content-Encoding指定壓縮類型進行壓縮傳輸。
  • 分塊傳輸:因為音頻,視頻都是經過高倍壓縮,在壓縮也起不到什么效果,因此有了分塊傳輸,解決大文件傳輸。
  • 分塊傳輸因名而異,就是將大文件分成多分,一份份傳輸。

    使用形式:在響應報文中用Transfer-Encoding:chunked 來表示:代表body的報文不是一次性發過來的,而是分成許多的塊(chunk)逐個發送的。

    因為分塊發送body的長度是未知,的因此無法在頭部指定Content-length長度,因此只能通過Chunked發送。

    transfer-Encoding:Chunked和Content-length:兩個字段互斥,所以無法同時出現。

    分塊傳輸流程:

  • 每個分塊包含兩個部分,長度頭和數據塊;
  • 長度頭是以 CRLF(回車換行,即\r\n)結尾的一行明文,用 16 進制數字表示長度;
  • 數據塊緊跟在長度頭后,最后也用 CRLF 結尾,但數據不包含 CRLF;
  • 最后用一個長度為 0 的塊表示結束,即“0\r\n\r\n”
  • 范圍請求:可以任意請求一個大文件之間的某段。()例如:看視頻快進,就可以簡單理解為范圍請求傳輸。

    范圍請求條件:服務端必須返回Accept-Ranges:bytes 頭,明確告訴客戶端我支持范圍請求。客戶端在發送Range:bytes=x-y獲取范圍請求。

    要注意 x、y 表示的是“偏移量”,范圍必須從 0 計數,例如前 10 個字節表示為“0-9”,第二個 10 字節表示為“10-19”,而“0-10”實際上是前 11 個字節。

    Range 的格式也很靈活,起點 x 和終點 y 可以省略,能夠很方便地表示正數或者倒數的范圍。假設文件是 100 個字節,那么:

  • “0-”表示從文檔起點到文檔終點,相當于“0-99”,即整個文件;
  • “10-”是從第 10 個字節開始到文檔末尾,相當于“10-99”;
  • “-1”是文檔的最后一個字節,相當于“99-99”;
  • “-10”是從文檔末尾倒數 10 個字節,相當于“90-99”。
  • 客戶端發送了請求,服務端會對其進行驗證,是否合法(例如:長度最大100,你請求200開始將會不合法)如果合法后服務器將會返回一個字段Content-Range:bytes x-y/length ,length代表總長度。

    因此范圍請求流程:

  • 先發個 HEAD,看服務器是否支持范圍請求,同時獲取文件的大小;
  • 開 N 個線程,每個線程使用 Range 字段劃分出各自負責下載的片段,發請求傳輸數據;
  • 下載意外中斷也不怕,不必重頭再來一遍,只要根據上次的下載記錄,用 Range 請求剩下的那一部分就可以了。
  • ?

    注:一個請求連接一定對應一個響應結果。

    分段傳輸服務端Transfer-Encoding:chunked,是分段傳輸,但是最終body體中接收的還是一個完整的數據。

    范圍請求:服務端確認Accept-Ranges: bytes 后在發送請求Range:x-y 服務端響應Content-Range:bytes x-y/length 是請求的這段內容,本身就是一個分段請求體。

    ?

    ?

    總結

    以上是生活随笔為你收集整理的http大文件传输的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。