http大文件传输
隨著科技的發展網絡傳輸的資源越來越大,從幾k到幾M,幾G。因此網絡傳輸壓力越來越大。
由此http有了解決,大文件傳輸的方法:
分塊傳輸因名而異,就是將大文件分成多分,一份份傳輸。
使用形式:在響應報文中用Transfer-Encoding:chunked 來表示:代表body的報文不是一次性發過來的,而是分成許多的塊(chunk)逐個發送的。
因為分塊發送body的長度是未知,的因此無法在頭部指定Content-length長度,因此只能通過Chunked發送。
transfer-Encoding:Chunked和Content-length:兩個字段互斥,所以無法同時出現。
分塊傳輸流程:
范圍請求:可以任意請求一個大文件之間的某段。()例如:看視頻快進,就可以簡單理解為范圍請求傳輸。
范圍請求條件:服務端必須返回Accept-Ranges:bytes 頭,明確告訴客戶端我支持范圍請求。客戶端在發送Range:bytes=x-y獲取范圍請求。
要注意 x、y 表示的是“偏移量”,范圍必須從 0 計數,例如前 10 個字節表示為“0-9”,第二個 10 字節表示為“10-19”,而“0-10”實際上是前 11 個字節。
Range 的格式也很靈活,起點 x 和終點 y 可以省略,能夠很方便地表示正數或者倒數的范圍。假設文件是 100 個字節,那么:
客戶端發送了請求,服務端會對其進行驗證,是否合法(例如:長度最大100,你請求200開始將會不合法)如果合法后服務器將會返回一個字段Content-Range:bytes x-y/length ,length代表總長度。
因此范圍請求流程:
?
注:一個請求連接一定對應一個響應結果。
分段傳輸服務端Transfer-Encoding:chunked,是分段傳輸,但是最終body體中接收的還是一個完整的數據。
范圍請求:服務端確認Accept-Ranges: bytes 后在發送請求Range:x-y 服務端響應Content-Range:bytes x-y/length 是請求的這段內容,本身就是一個分段請求體。
?
?
總結
- 上一篇: 编程练习:复数四则运算
- 下一篇: 标准霍夫变换