如何驗證代理鏈路中的 HTTP Range 與斷點續傳完整性

HTTP Range 能提高大型檔案下載、媒體驗證及中斷後蒐集效率,也會帶來正確性風險。代理可能忽略請求範圍、快取錯誤分段、傳回不一致驗證器,或在各段間更換出口。下載器最後可能得到長度正確但位元組錯誤的檔案。
本指南建立代理採購可用的 Range 與續傳測試,只使用自有或獲准檔案和端點。
明確預期協定
單一位元組範圍通常應傳回 206 Partial Content、有效 Content-Range、正確分段長度和穩定表示驗證器。來源端若忽略 Range,可能傳回完整內容及 200。客戶端必須區分,不能把完整回應附加至部分檔案。
記錄測試編號、路由別名、請求範圍、狀態、Content-Range、長度、ETag 雜湊、Last-Modified、分段摘要、完整檔案摘要、代理工作階段雜湊及失敗階段。不得記錄代理密碼、授權標頭、Cookie 或原始權杖。
建立確定性夾具
建立已知位元組及強摘要的自有二進位物件,長度足以跨多個分段,並在每個邊界放置不同模式。提供穩定 ETag、Last-Modified、Accept-Ranges 和總長度。
再建立大小相近但邊界位元組不同的第二版本,用來驗證物件更新時續傳能否安全停止。
建立直連基線
分別請求第一個位元組、中間區間、最後位元組、開放結尾範圍、後綴範圍、無法滿足範圍,以及能重組成較大區間的相鄰範圍。逐一驗證狀態、邊界、長度與分段摘要。
無法滿足的請求應指出目前總長度,不可傳回看似合理的部分正文。
執行代理路由矩陣
| 維度 | 值 |
|---|---|
| 路徑 | 直連、閘道 A、閘道 B |
| 位址族 | 已購買的 IPv4、IPv6 |
| 工作階段 | 固定、輪換 |
| 連線 | 新建、重複使用 |
| 編碼 | identity;明確支援時再測壓縮 |
| 快取 | 唯一未命中、受控命中 |
固定物件版本、範圍、客戶端及逾時,每段在每條路由重複。輪換代理可更換出口,但所有分段仍須屬於相同物件表示。
數學驗證 Content-Range
對 bytes start-end/total,要求起點不大於終點,傳回長度等於終點減起點加一,終點小於總長度,正文符合自有夾具對應位元組,而且同一次重組的所有分段共享同一強驗證器。
拒絕位元組不同的重疊段、意外空隙及下載途中改變的總長度。不可只以 Content-Length 判斷正確。
使用驗證器保護續傳
續傳時帶上合適驗證器,避免把新版物件位元組附加到舊檔案。若驗證器不再相符,從乾淨暫存檔重新開始。完整摘要通過前,不覆寫已驗證目標。
弱驗證器與強驗證器能力不同。無法證明兩個分段代表相同位元組時,應重新開始而不是猜測。
分開壓縮與位元組範圍
Range 針對選定表示。自動壓縮會改變偏移、長度及驗證器。先以 identity 建立位元組正確性;只有來源端協定明確時才測壓縮,並記錄偏移屬於編碼或解碼位元組。
組合前先執行gzip 與 Brotli 完整性測試。
測試失敗與重試
在已知位元組數後中斷連線並續傳。分別測試標頭前逾時、分段中逾時,以及最後一段完成但提交前中斷。記錄重試是否建立新通道或改變代理出口。
部分 GET 通常可重試,但必須寫入有偏移的暫存檔,不能盲目附加。結合代理重試風暴預防指南限制次數及總耗時。
偵測快取與路由污染
在獲准夾具使用唯一挑戰,分開快取未命中與受控命中。跨閘道比較驗證器及分段摘要,快取不得在版本 B 驗證器下傳回版本 A 分段。
不得繞過第三方快取規則,只在自有或明確許可環境測試。
測量有效效能
記錄首位元組時間、分段吞吐、續傳成功率、重複下載位元組、完整檔案成功率和每個已驗證物件成本。原始吞吐高的路由若經常因錯誤分段重下載,仍然昂貴。
上線檢查清單
- 直連首段、中段、末段、後綴及無效範圍通過;
- 每個 206 的數學邊界有效;
- 分段摘要符合自有夾具;
- 一次重組不混用驗證器;
- 物件改變會觸發乾淨重啟;
- identity 通過後才測壓縮;
- 中斷傳輸續寫暫存檔;
- 完整摘要通過後才提交;
- IPv4、IPv6、閘道與工作階段分開統計;
- 日誌不含憑據或私有負載。
常見問題
Range 請求傳回 200 一定是錯誤嗎?
不一定,伺服器可能忽略 Range 並傳回完整物件。客戶端應替換或重啟,不可附加。
分段可使用不同代理出口嗎?
若來源端允許且驗證器證明表示相同,可以。但存取狀態或地區內容會改變時,固定工作階段較安全。
總長度相同就足夠嗎?
不足。錯誤或重複分段仍可維持總長度,必須驗證每段和最終完整摘要。
應立即平行下載分段嗎?
先證明循序下載正確,路由、來源端及快取穩定後再加入受限平行。
合規說明
只從自有或獲准系統與物件請求範圍。遵守速率限制、授權、快取規則及隱私要求,不得利用分段下載規避存取控制或流量限制。