Range回源,指CDN節點在回源的HTTP請求里面攜帶了Range信息,源站在收到CDN節點的回源請求時,根據HTTP請求頭中的Range信息返回指定范圍的內容數據給CDN節點。Range回源可有效提高文件分發效率,可以提高緩存命中率,減少回源流量消耗和源站壓力,并且提升資源響應速度。
背景信息
Range是HTTP請求頭之一,可用來指定需獲取的內容的范圍。例如,Range: bytes=0-100
表示回源請求該文件的前101個字節的數據內容。
開啟Range回源功能后,CDN收到用戶的請求時,如果CDN節點上未緩存該資源或資源已過期,CDN節點回源會采用Range請求,從源站分段獲取用戶需要的部分資源并緩存到CDN節點上。
開啟Range回源的工作原理如下圖所示:
注意事項
開啟Range回源有以下注意事項:
開啟Range回源前需確認源站是否支持Range請求,即HTTP請求頭中包含Range字段,并且源站能夠響應正確的206文件分片。如果源站不支持Range請求,開啟Range回源將導致資源無法緩存。
Range回源是可選配置項,CDN控制臺默認未開啟。
Multipart Ranges特性狀態默認關閉,開啟Range回源功能也不會同步開啟Multipart Ranges特性,請提交工單申請開啟Multipart Ranges特性。
操作步驟
登錄CDN控制臺。
在左側導航欄,單擊域名管理。
在域名管理頁面,找到目標域名,單擊操作列的管理。
在指定域名的左側導航欄,單擊視頻相關。
在Range回源區域,單擊修改配置。
選擇不使用Range回源,跟隨客戶端Range請求或開啟Range回源(大文件場景推薦配置)Range回源。
參數
描述
示例
Range回源
不使用Range回源
默認為不使用Range回源狀態,無論客戶端是否使用Range請求CDN節點,CDN節點回源時都會請求整個文件,在大文件場景下的文件分發效率較低。
例如,客戶端向CDN節點發起的請求中含有
range:0-100
,則CDN節點向源站發起的請求中不會攜帶Range參數。源站會響應CDN節點完整文件(假設完整文件大小為10 MB,源站就會響應10 MB的文件給CDN節點),CDN節點收到源站響應的文件后,會將文件緩存下來,同時響應客戶端range:0-100
的內容。跟隨客戶端Range請求
開啟跟隨客戶端Range請求后,當客戶端使用Range請求CDN節點時,CDN節點才會采用Range請求回源。CDN節點第一次回源請求會按照用戶請求中的Range大小向上取整回用戶源站,后面全部按照512 KB分片大小回用戶源站。
例如,用戶請求了600 KB,CDN節點第一次回源請求會按照1024 KB回源,后面全部按照512 KB分片大小回用戶源站。
例如,客戶端向CDN節點發起的請求中含有
range:0-100
,則CDN節點會按照512 KB分片大小向源站發起請求,源站響應了這個512 KB分片大小的內容后,CDN節點會緩存該分片,并響應range:0-100
的內容給客戶端。開啟Range回源(大文件場景推薦配置)
開啟Range回源(大文件場景推薦配置)后,無論客戶端是否使用Range請求CDN節點,CDN節點都會采用Range請求回源。CDN節點的所有回源Range請求都按照512 KB分片大小回用戶源站。
無
規則條件
規則條件能夠對用戶請求中攜帶的各種參數信息進行識別,以此來決定某個配置是否對該請求生效。
不使用:不使用規則條件。
選擇已配置的規則引擎,新增或修改規則引擎請參見規則引擎。
單擊確定,完成配置。
HTTP Range范圍超出有效區間的兼容性配置
當阿里云OSS作為源站時,默認情況下,如果HTTP Range請求不合法或者指定范圍超出有效區間,會導致Range不生效,響應返回值為200,并傳送整個Object內容,此時會影響回源獲取文件的響應速度。
為了解決該問題,阿里云OSS產品提供了兼容性配置方式。使用HTTP Range時,通過增加回源HTTP請求頭x-oss-range-behavior:standard
,可以改變指定HTTP Range范圍超出有效區間時OSS的行為。行為改變的示例如下:
此處假設Object資源大小為1000字節,Range有效區間為0~999。如通過HTTP Range請求獲取大文件的部分內容時,因選取了無效的范圍,導致OSS返回InvalidRange錯誤碼,請參見OSS返回416錯誤進行解決,詳細錯誤信息如下:The requested range cannot be satisfied
。
Range: bytes=500-2000
:末字節超出有效區間,返回500~999字節范圍內容。Range: bytes=1000-2000
:首字節超出有效區間,返回錯誤416 (InvalidRange)
。Range: bytes=1000-
:首字節超出有效區間,返回錯誤416 (InvalidRange)
。Range: bytes=-2000
:指定范圍超出有效區間,返回0~999字節,即完整的文件內容。
具體請求示例請參見如何通過HTTP Range請求分段獲取OSS資源。
建議在大文件(平均單個文件大小在20 MB以上)內容分發場景下,CDN回源OSS的配置中都進行該項配置。
如果在阿里云OSS源站上開啟了訪問鑒權功能,并且由客戶端來實現回源請求的簽算,那么客戶端在簽算的時候需要把回源請求頭
x-oss-range-behavior:standard
加入簽算(由于阿里云OSS在計算簽名的時候,會將所有帶x-oss-
前綴的請求頭都加入計算,如果客戶端簽算的時候沒有把x-oss-range-behavior:standard
加入簽算,會導致阿里云OSS源站簽算不一致,拒絕回源請求)。