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