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