下載協定界線
HTTP Range 與 Content-Range:精確位元組、206、416 及續傳界線
Range 描述請求的位元組,不保證伺服器回傳部分內容。先用本機測試器確認計算,再分別驗證實際回應與表示資料。
內容更新: · 維護者:Hung Chi-Hsueh · 修正回報
端點包含在內,位移從零開始
長度 1,000 bytes 時,bytes=0-99 請求 100 bytes,不是 99。bytes=995-1200 截至 995-999,共五個位元組;bytes=998- 是最後兩個位元組,bytes=-3 是 997-999。suffix 大於表示資料時選取全部;零 suffix 無法滿足。
部分成員超界時,整組仍可能可滿足。測試器保留每段、重複與重疊,不默默合併或加總長度。多個回傳區間通常使用 multipart/byteranges,各段有自己的 Content-Range;boundary 與段落標頭會讓完整主體長於 payload 的合計位元組數。
位元組屬於選定的編碼後表示資料
HTTP byte range 以表示資料編碼後的位元組序列計算,不是字元位置、Unicode code point,也不是自動解壓後的文字位移。Content-Encoding 為 gzip 時,不可把編碼後的 Range 位移與瀏覽器顯示的解碼後文字長度混用。
續傳需要相同的選定表示資料及相容驗證碼;內容協商、編碼或資源本身都可能在請求間改變。只有已存檔案長度,不能證明把新位元組附加上去就會得到正確檔案。
206 與 416 是模型結果,不是伺服器承諾
測試器假設 GET 的一般條件原本允許 200。實際伺服器可忽略 Range、合併成員、只回部分可滿足區間,或拒絕效率不佳的重疊集合。Accept-Ranges: bytes 是建議,不證明下一次請求一定回 206。工具不支援未知單位,但它的錯誤不能替伺服器指定狀態碼。
選擇處理但整組無法滿足時,模型顯示 416 與 Content-Range: bytes */長度。此長度是選定表示資料長度,不是錯誤主體大小。首版刻意不模擬空資源的 Range 請求;RFC 9110 對零長度 suffix 有特殊語意,因此不支援不等於 HTTP 請求無效。
檢查 Content-Range,不補造缺少的證據
bytes 0-99/1000 描述 100 bytes 及已知總長度;bytes 5-9/* 描述五個位元組,但總長度未知。須符合起點 ≤ 結尾,且已知總長度 > 結尾。bytes */0 是有效的無法滿足範圍語法;不接受 bytes */*。
選填的主體位元組比對,只把提供的數字與可滿足區間的含端點長度比較,不讀實際主體。bytes */長度 請留空,因為 416 錯誤主體另有自己的長度。Content-Range 有效,不證明位元組真偽或回應狀態;HTTP 意義取決於回應情境。
If-Range 不匹配表示完整處理,不是 412
強式 If-Range ETag 相符時,才繼續所選的 Range 處理模型。不同標籤、目前為弱標籤或未提供標籤,都不能建立強式匹配,因此忽略 Range;模型顯示正常完整表示資料 200,不額外引入 412 條件引擎。
首版只接受一個引號包住的強式 If-Range ETag,不接受弱標籤、萬用字元、清單或 HTTP 日期。日期驗證還需要強驗證碼及日期完全相同的規則。一般 If-Match/If-None-Match 與日期條件請用獨立的條件請求工具;若它們本應回 304,就不應假設已通過 200 再判斷 Range。
有限本機輸入與精確匯出
工具接受欄位值,不是整份標頭區塊或網址。每欄最多 4 KiB、每整數 30 位、Range 集合 16 段、JSON 輸出 64 KiB。Tab、空清單成員及控制字元明確不在此嚴格子集合內;這些產品限制不是新的 HTTP 規則。
位元組數值以 BigInt 計算並以十進位字串匯出 JSON,超過 Number.MAX_SAFE_INTEGER 仍保持精確。圖形只是輔助,極小區間會取整;以表格與匯出字串為準。輸入與報告只留頁面/Worker 記憶體,不上傳、不保存、不放入分享網址。修改欄位會清除舊結果與匯出;分享前請檢查 ETag 及所有報告內容。
表示資料:1000 bytes
Range:bytes=995-1200, -3
第 1 段:995–999 = 5 bytes
第 2 段:997–999 = 3 bytes(與第 1 段重疊,不加總)
Content-Range:bytes 0-99/1000
含端點長度:100 bytes資料可信度