http range 欄位的意義

2021-06-18 18:28:43 字數 2366 閱讀 3566

range 的規範定義如下:

ranges-specifier = byte-ranges-specifier

byte-ranges-specifier = bytes-unit 「=」 byte-range-set

byte-range-set = 1#( byte-range-spec | suffix-byte-range-spec )

byte-range-spec = first-byte-pos 「-」 [last-byte-pos]

first-byte-pos = 1*digit

last-byte-pos = 1*digit

(rfc2616 裡充斥著這種形式的定義,一開始覺得挺亂,後來習慣了就發現其實挺科學,挺好理解的:))

值得注意的就是 byte-range-set 是乙個 byte-range 的集合,所以在實際請求中完全可能會出現如下這種形式:

range: bytes=123-567,789-

這個資料區間是個閉合區間,起始值是 0,所以「range: bytes=0-1」這樣乙個請求實際上是在請求開頭的 2 個位元組。

byte-range-spec 裡的 last-byte-pos 可以省略,代表從 first-byte-pos 一直請求到結束位置。其實 first-byte-pos 也是可以省略的,只不過就不叫 byte-range-spec 了,而是叫 suffix-byte-range-spec,規範如下:

suffix-byte-range-spec = 「-」 suffix-length

suffix-length = 1*digit

比如「range: bytes=-200」,它不是表示請求檔案開始位置的 201 個位元組,而是表示要請求檔案結尾處的 200 個位元組。

如果 byte-range-spec 的 last-byte-pos 小於 first-byte-pos,那麼這個 range 請求就是無效請求,server 需要忽略這個 range 請求,然後回應乙個 200 ok,把整個檔案發給 client。

如果 byte-range-spec 裡的 first-byte-pos 大於檔案長度,或者 suffix-byte-range-spec 裡的 suffix-length 等於 0,那麼這個 range 請求被認為是不能滿足的,server 需要回應乙個 416 requested range not satisfiable。

server 除了要能理解 range 請求之外,在回應 client 時還要使用 content-range 來告訴 client 他到底傳送了多少資料,content-range 的規範定義如下:

content-range = 「content-range」 「:」 content-range-spec

content-range-spec = byte-content-range-spec

byte-content-range-spec = bytes-unit sp byte-range-resp-spec 「/」 ( instance-length | 「*」 )

byte-range-resp-spec = (first-byte-pos 「-」 last-byte-pos) | 「*」

instance-length = 1*digit

詳盡的細枝末節就不在這裡記述了,舉個例子說明一下,比如某檔案的大小是 1000 位元組,client 請求這個檔案時用了 「range: bytes=0-500」,那麼 server 應該把這個檔案開頭的 501 個位元組發回給 client,同時回應頭要有如下內容:

content-range: bytes 0-500/1000

range 請求的一些注意事項:

1) 不支援 range 請求的 server 要用「accept-ranges: none」對 client 表明心意;server 也可以主動告訴 client 「accept-ranges: bytes」,但是 client 也可以在沒有收到這個指示的前提下向 server 發 range 請求。

2) byte-range-set 中的區間可以是「有洞」的,也可以是部分重疊的

3) 單區間的 byte-range-set 正常回應就可以了,但是多區間 byte-range-set 需要 server 使用 multipart/byterange 來回應

range頭域  

range頭域可以請求實體的乙個或者多個子範圍。例如,  

表示頭500個位元組:bytes=0-499  

表示第二個500位元組:bytes=500-999  

表示最後500個位元組:bytes=-500  

表示500位元組以後的範圍:bytes=500-  

第乙個和最後乙個位元組:bytes=0-0,-1  

同時指定幾個範圍:bytes=500-600,601-999 

MySQL執行計畫各自欄位的意義

mysql執行計畫各自欄位的意義 一 各個欄位的含義 1 id id 列中的資料為一組數字,表示執行select語句順序 id值相同時,執行順序由上至下 id值越大優先順序越高,越先被執行 2 select type 查詢的型別,主要是用於區分普通查詢 聯合查詢 子查詢等複雜的查詢。簡單的selec...

Andoid2 X各欄位意義

contactscontract.contacts.times contacted times contacted 你給乙個聯絡人打過幾次 contactscontract.contacts.contact status contact status 聯絡人最近更新狀態。contactscontra...

IP報文格式及各欄位意義

ip資料報由報頭和資料兩部分組成。報頭的前一部分是固定長度,共20位元組。在報頭的固定部分的後面是可選部分 ip選項和填充域。首部各字段的含義如下 1 版本 佔4位,指ip協議的版本。2 報頭長度 佔4位,該字段的單位是32位字 1個32位字長是4位元組 因此當ip報頭長度為1111時,報頭長度就達...