HTTP Header 中有兩個特定用途的 Header苛萎,Range & Content-Range。
這兩個 Header 的主要作用就是處理斷點(diǎn)續(xù)傳讲弄,斷點(diǎn)續(xù)傳即把一個文件的下載行為分成多段下載措左,如果因為網(wǎng)絡(luò)或者其它原因?qū)е掠胁糠窒螺d不成功,可以只進(jìn)行相關(guān)分段的重新下載避除,以節(jié)省流量并加快下載速度怎披。
首先是 Range 這個 Header,MDN 介紹如下:https://developer.mozilla.org/en-US/docs/Web/HTTP/Range_requests瓶摆,該 Header 只可以在 Request 中使用
語法如下:
Range: <unit>=<range-start>-
例:Range: bytes=10- 凉逛,表示為從第 11 個字節(jié)到最后一個字節(jié)
Range: <unit>=<range-start>-<range-end>
例:Range: bytes=100-199,表示為從第 101 個字節(jié)到第 200 個字節(jié)
Range: <unit>=<range-start>-<range-end>, <range-start>-<range-end>
例:Range: bytes=100-199,200-299 表示同時獲取第 101 個字節(jié)到 第 200 個字節(jié)以及 第 201 個字節(jié)到第 300 個字節(jié)
Range: <unit>=-<suffix-length>
例:Range: bytes=-100群井,表示為獲取最后 100 個字節(jié)
與之對應(yīng)的是 Content-Range状飞,MDN 介紹如下:https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Range,該 Header 只可以在 Response 中使用
語法如下:
Content-Range: <unit> <range-start>-<range-end>/<size>
我們多在可以獲取文件大小的時候使用如下結(jié)構(gòu)
Content-Range: bytes 100-199/5000书斜,表示返回第 101 到第 200 個字節(jié)诬辈,文件分段長度 200,文件總大小為 5000 字節(jié)
同時 HTTP 狀態(tài)碼由常規(guī)的 200 變成 206荐吉,表示返回的是部分內(nèi)容
一般下載類庫或者工具在使用時焙糟,會探測服務(wù)方是否支持?jǐn)帱c(diǎn)續(xù)傳,使用如下請求
Range: bytes=0-0
也就是獲取第一個字節(jié)样屠,如果對方服務(wù)器支持?jǐn)帱c(diǎn)續(xù)傳酬荞,則會返回
Content-Range: bytes 0-0/5000
HTTP 狀態(tài)碼返回 206