配置Range回源
Range回源,指DCDN節(jié)點(diǎn)在回源的HTTP請求里面攜帶了Range信息,源站在收到DCDN節(jié)點(diǎn)的回源請求時(shí),根據(jù)HTTP請求頭中的Range信息返回指定范圍的內(nèi)容數(shù)據(jù)給DCDN節(jié)點(diǎn)。Range回源可有效提高文件分發(fā)效率,可以提高緩存命中率,減少回源流量消耗和源站壓力,并且提升資源響應(yīng)速度。
背景信息
Range是HTTP請求頭之一,可用來指定需獲取的內(nèi)容的范圍。例如,Range: bytes=0-100
表示回源請求該文件的前101個(gè)字節(jié)的數(shù)據(jù)內(nèi)容。
開啟Range回源功能后,DCDN收到用戶的請求時(shí),如果DCDN節(jié)點(diǎn)上未緩存該資源或資源已過期,DCDN節(jié)點(diǎn)回源會(huì)采用Range請求,從源站分段獲取用戶需要的部分資源并緩存到DCDN節(jié)點(diǎn)上。
開啟Range回源的工作原理如下圖所示:
注意事項(xiàng)
開啟Range回源前需確認(rèn)源站是否支持Range請求,即HTTP請求頭中包含Range字段,并且源站能夠響應(yīng)正確的206文件分片。如果源站不支持Range請求,開啟Range回源將導(dǎo)致資源無法緩存。
Multipart Ranges特性狀態(tài)默認(rèn)關(guān)閉,開啟Range回源功能也不會(huì)同步開啟Multipart Ranges特性,請提交工單申請開啟Multipart Ranges特性。
操作步驟
登錄DCDN控制臺(tái)。
在左側(cè)導(dǎo)航欄,單擊域名管理。
在域名管理頁面,單擊目標(biāo)域名對應(yīng)的配置。
在指定域名的左側(cè)導(dǎo)航欄,單擊回源配置。
在回源配置頁簽下找到Range回源。
打開或關(guān)閉Range回源開關(guān)。
Range回源
具體描述
示例
開啟
當(dāng)您需要訪問資源文件指定范圍內(nèi)的部分內(nèi)容時(shí),為了提高資源響應(yīng)效率,則需要開啟Range回源。開啟Range回源請求回源站后,源站需要依據(jù)Range,響應(yīng)文件的字節(jié)范圍,同時(shí)DCDN節(jié)點(diǎn)也會(huì)向客戶端響應(yīng)相應(yīng)字節(jié)范圍的內(nèi)容。
如果客戶端向源站服務(wù)器的請求中含有
range:0~100
,則源站收到的請求中也會(huì)含有range:0~100
。源站響應(yīng)DCDN節(jié)點(diǎn),DCDN節(jié)點(diǎn)響應(yīng)客戶端字節(jié)范圍為0~100,共101個(gè)字節(jié)。關(guān)閉
當(dāng)您需要訪問資源文件的全部內(nèi)容時(shí),則需要關(guān)閉Range回源。關(guān)閉Range回源后,DCDN上層節(jié)點(diǎn)會(huì)向源站請求全部的文件,由于客戶端收到Range定義的字節(jié)后自動(dòng)斷開HTTP連接,請求的文件沒有緩存到DCDN節(jié)點(diǎn)上,最終導(dǎo)致緩存命中率較低,并且回源流量較大。
如果客戶端向源站服務(wù)器的請求中含有
range:0~100
,則源站端收到的請求中沒有Range這個(gè)參數(shù)。源站響應(yīng)DCDN節(jié)點(diǎn)完整文件,DCDN節(jié)點(diǎn)響應(yīng)給客戶端的就是101個(gè)字節(jié),由于鏈接斷開,會(huì)導(dǎo)致該文件沒有緩存到DCDN節(jié)點(diǎn)上。
HTTP Range范圍超出有效區(qū)間的兼容性配置
當(dāng)阿里云OSS作為源站時(shí),默認(rèn)情況下,如果HTTP Range請求不合法或者指定范圍超出有效區(qū)間,會(huì)導(dǎo)致Range不生效,響應(yīng)返回值為200,并傳送整個(gè)Object內(nèi)容,此時(shí)會(huì)影響回源獲取文件的響應(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ā)場景下,DCDN回源OSS的配置中都進(jìn)行該項(xiàng)配置。
如果在阿里云OSS源站上開啟了訪問鑒權(quán)功能,并且由客戶端來實(shí)現(xiàn)回源請求的簽算,那么客戶端在簽算的時(shí)候需要把回源請求頭
x-oss-range-behavior:standard
加入簽算(由于阿里云OSS在計(jì)算簽名的時(shí)候,會(huì)將所有帶x-oss-
前綴的請求頭都加入計(jì)算,如果客戶端簽算的時(shí)候沒有把x-oss-range-behavior:standard
加入簽算,會(huì)導(dǎo)致阿里云OSS源站簽算不一致,拒絕回源請求)。