本文為您介紹CDN緩衝相關的常見問題。
CDN緩衝清理機制是什嗎?
緩衝在CDN節點上的資源,如果該資源的訪問熱度較低(同一個CDN節點上的同一個資源被用戶端訪問的頻次較低),那麼很可能會在緩衝到期之前被CDN節點上其他訪問熱度較高的資源覆蓋。
CDN預設的緩衝規則是什嗎?
CDN節點在收到來源站點響應的靜態檔案資源的時候,會按照以下的緩衝規則來執行(數值越小,優先順序越高):
來源站點響應
pragma:no-cache
、cache-control:no-cache
(或者no-store
,或者max-age=0
)時,不緩衝。CDN控制台設定的緩衝到期時間或者狀態代碼到期時間。
說明若CDN請求同時命中多條規則,有且僅有一條規則會生效,優先順序為:權重>規則建立時間。
有多條緩衝規則的情況下,建議每條緩衝規則都設定不同的權重(權重越大優先順序越高),通過權重來控制規則執行優先順序。
權重相同的規則生效優先順序:先建立的>後建立的,與規則類型無關。
來源站點配置其他緩衝規則,優先順序由高至低為:
cache-control
>expires
>last-modified
>ETag
。來源站點響應中使用
cache-control
設定到期時間,取值為max-age
或s-maxage
,並且max-age
或s-maxage
的值大於0,例如:cache-control:max-age=3600。如果同時存在max-age
和s-maxage
,則以s-maxage
的值為準。來源站點響應中使用
expires
設定到期時間,例如:expires:Tue, 25 Nov 2031 17:25:43 GMT。來源站點響應中攜帶了
ETag
或last-modified
,則使用以下規則來計算緩衝時間:有
last-modified
,使用公式(目前時間-last-modified
)* 0.1,計算結果在10秒~3600秒及之間的,取計算結果時間;小於10秒的,按照10秒處理;大於3600秒的,按照3600秒處理。只有
ETag
,緩衝10秒。
來源站點返回的資料中
ETag
、last-modified
、cache-control
和expires
這些緩衝相關的回應標頭都沒有攜帶,則預設不緩衝。
如何判斷CDN緩衝是否成功?
阿里雲CDN對於檔案是否支援緩衝,您可以通過檢查HTTP回應標頭中的相關欄位來判斷。
X-Cache
: 表示請求是否命中了CDN緩衝。如果值為HIT,則表示請求命中了CDN緩衝;如果值為MISS或者欄位不存在,則表示請求沒有命中緩衝。Age
: 表示該檔案在CDN節點上緩衝的時間,單位為秒。只有檔案存在於節點上Age
欄位才會出現,當檔案被重新整理後或者檔案被清除的首次訪問,在此前檔案並未緩衝,無Age
頭部欄位。需要注意當Age
為0時,表示節點已有檔案的緩衝,但由於緩衝已到期,本次無法直接使用該緩衝,需回源校正。X-Swift-CacheTime
: 表示CDN節點上的允許緩衝時間,即該檔案可以在CDN節點上緩衝多久,是指檔案在CDN節點緩衝的總時間。計算還有多久需要回源重新整理=X-Swift-CacheTime
–Age
。X-Swift-SaveTime
:表示資源首次被緩衝到CDN節點上的時間。這個時間是按照格林尼治標準時間(GMT)記錄的,若要轉換為中國北京時間,需要加上8小時。例如,如果X-Swift-SaveTime
的值為2023-04-17 14:30:49
,那麼該資源在北京時間中的緩衝開始時間為2023-04-17 22:30:49
。
為了查看這些HTTP回應標頭,您可以通過以下兩種方式查看您的內容是否緩衝到CDN:
方式1:使用瀏覽器的開發人員工具(如Chrome的開發人員工具)
方式2:使用curl命令查看資源緩衝情況
curl "http://example.com/path/to/response.html" -voa
如何解決URL的傳遞參數為變數導致CDN快取命中率低的問題?
可能是因為沒有開啟CDN的忽略參數功能,詳情請參見URL的傳遞參數為變數導致CDN快取命中率低。
如何設定檔案不緩衝直接回源?
根據您的需求,針對不希望緩衝的資源,按照目錄、檔案路徑、檔案類型設定對應的緩衝時間,設定如下:
类型:選擇目录或文件后缀名。
地址:填寫您不想緩衝的具體資源路徑或檔案名稱尾碼,例如,需要設定
php,jsp,asp
類型的動態檔案和admin
目錄下的所有檔案不緩衝。过期时间:將到期時間設定為“0”,表示不緩衝該類型的資源。
權重:可按照需要調整權重值,權重越高,在快取命中判斷時優先順序越強。
詳情請參見配置緩衝到期時間。
在CDN控制台緩衝到期時間設定為0,為何訪問到的資源仍然不是最新內容?
在CDN控制台將緩衝到期時間設定為0,通常是為了CDN節點上的內容不被緩衝,從而每次請求都會直接回來源站點擷取最新內容。然而,如果您發現訪問到的資源仍然不是最新的內容,可能有幾個原因:
瀏覽器本機快取:使用者的瀏覽器也可能緩衝了舊的內容,即使CDN和來源站點都沒有緩衝,如果使用者本機快取未到期,也可能導致載入的是舊版資源。建議清除本地瀏覽器緩衝或使用無痕隱私模式來測試。
配置生效延遲:雖然設定了緩衝到期時間為0,但可能需要一定時間讓這個設定在所有CDN節點上生效。另外,如果CDN節點尚未檢測到緩衝規則的更改,它可能仍然會返回舊的緩衝內容。
來源站點緩衝未重新整理:來源站點伺服器可能也有自己的緩衝機制。如果來源站點緩衝了內容並且沒有及時更新,CDN節點回源時可能擷取的是來源站點的舊緩衝。
節點緩衝清除延遲:如果在修改配置前,CDN節點已經緩衝了某個資源,雖然現在設定緩衝時間為0,但已緩衝的資源可能需要一段時間才會從所有CDN節點中完全清除。您也可以通過手動重新整理緩衝,確保立即從來源站點擷取最新內容,詳情請參見手動重新整理資源。
來源站點變更檔案後,CDN節點上的緩衝會主動、即時更新嗎?
來源站點變更檔案後,CDN節點上的緩衝不會主動、即時更新。通常情況下,一旦某個檔案被緩衝到CDN節點上,它會根據配置的緩衝策略來決定何時到期或重新整理。
CDN節點根據您在控制台配置的緩衝到期時間更新緩衝;若來源站點變更檔案,但CDN緩衝未達到到期時間,不會主動回源更新檔案,此時將造成來源站點檔案和CDN緩衝的檔案不一致,詳情請參見配置緩衝到期時間。
您可以通過CDN提供的重新整理緩衝手動清除緩衝。這種方式可以立即刪除CDN節點上的特定檔案或目錄的緩衝,使得下一次請求會回源擷取最新的內容。
通過控制台操作:手動重新整理資源
調用API介面:RefreshObjectCaches - 重新整理緩衝
影響CDN快取命中率下降的因素有哪些?
影響阿里雲CDN快取命中率下降的因素如下,更多情境關於影響快取命中率的因素介紹請參見提高CDN快取命中率。
重新整理緩衝:手動或自動重新整理快取作業可能導致短時間內命中率下降。
頻寬突增:當頻寬在短時間內大幅度增加時,會導致CDN節點回源請求增多,從而降低快取命中率。具體可參見重新整理和預熱資源。
CDN節點訪問新內容:如果CDN節點頻繁訪問首次請求的新內容,也會導致回源較多,進而表現出快取命中率的下降趨勢。
緩衝規則調整:對CDN緩衝策略進行修改或調整可能會影響快取命中率,例如未配置合適的緩衝到期時間或者緩衝原則設定不當。
URL中帶有可變參數:URL中問號(?)後的參數變化會導致不同的URL請求被視為不同的資源,即使實際指向的是同一份內容,這也會造成CDN快取命中率降低。具體可參見忽略參數。
未合理配置緩衝到期時間:對於不同更新頻率的靜態檔案,如未根據實際情況設定合理的緩衝到期時間,可能會導致緩衝資源過早失效,從而影響快取命中率。具體可參見配置緩衝到期時間。
如何排查CDN快取命中率較低的問題?
快取命中率較低可能會導致內容載入速度變慢,對來源站點造成一定的負載壓力。排查快取命中率低的問題,請參見CDN快取命中率較低排查方法。
如何設定緩衝全域生效?
您可以通過設定緩衝到期時間來實現緩衝全域生效。設定時,类型選擇目录後,在地址欄用正斜線(/)匹配所有目錄。具體操作請參見配置緩衝到期時間。
緩衝配置為什麼沒有生效?
如果您配置了緩衝規則,在使用過程中發現此緩衝規則未生效,可能是以下原因:
生效延遲:緩衝規則的修改或新增通常需要一段時間才能,請您在規則生效後再驗證。
緩衝更新機制:如果您對已緩衝的內容修改了緩衝規則,新規則不會立即應用到已經緩衝在CDN節點上的內容。這些內容需要等到原來的緩衝到期後才會回源重新擷取並按照新的規則進行緩衝。
緩衝重新整理操作未執行:在更改緩衝設定後,如果沒有手動重新整理緩衝,則舊的緩衝內容將繼續被提供給使用者,直到自然到期。如果您想要立即生效,請在修改緩衝規則後執行緩衝重新整理操作,詳情請參見重新整理和預熱資源。
緩衝回應標頭設定不當:檢查來源站點發送的HTTP回應標頭裡的
Cache-Control
和Expires
標題是否正確設定。例如,如果設定了Cache-Control: no-cache
或no-store
,則會指示CDN和瀏覽器不緩衝內容。緩衝規則有優先順序:若CDN請求同時命中多條規則,有且僅有一條規則會生效,優先順序為:權重>規則建立時間。
有多條緩衝規則的情況下,建議每條緩衝規則都設定不同的權重(權重越大優先順序越高),通過權重來控制規則執行優先順序。
權重相同的規則生效優先順序:先建立的>後建立的,與規則類型無關。
配置樣本:為加速網域名稱
demo.aliyun.com
配置以下緩衝策略,CDN節點回源下載資源http://demo.aliyun.com/image/example.png
,雖然以下兩條規則都匹配到了,但是因為這兩條規則的權重相同,因此要判斷規則建立的時間,先建立的規則優先順序高於後建立的,因為目錄/image這條規則建立的時間更早,所以系統最終生效的是目錄類型這條規則。
通過HTTP回應標頭配置CDN跨域資源共用(CORS)及注意事項
設定適當的HTTP回應標頭,允許來自不同源的請求訪問資源,詳情請參見配置跨域資源共用。
為什麼已經配置了回應標頭Access-Control-Allow-Origin,但是訪問資源仍提示跨域問題,response header中沒有配置的回應標頭?
如果您在阿里雲CDN中配置了回源回應標頭,如Access-Control-Allow-Origin
等,但是在用戶端訪問資源時遇到跨域問題,並且在回應標頭(response header)中沒有看到這些配置的回應標頭,可能原因有以下幾點:
可能的原因
配置未生效或錯誤:可能是配置沒有正確設定或尚未生效,導致CDN沒有按照預期返回跨域回應標頭。
CDN緩衝:CDN節點可能緩衝了舊的回應標頭資訊,這會導致即使您已更改配置,也仍然返回舊的頭資訊。
來源站點問題:如果您在CDN上配置了跨域回應標頭,但是來源站點的響應中也包含了跨域回應標頭,並且這些回應標頭與CDN的配置衝突,這可能會導致問題。在這種情況下,需要統一CDN和來源站點的配置。
瀏覽器緩衝:瀏覽器可能緩衝了舊的響應,導致它並未發起新的請求以擷取更新後的回應標頭。
解決方案
驗證配置:確認CDN配置已正確設定並且已經生效,特別是跨域相關的回應標頭設定。
清除CDN緩衝:您可以使用CDN的重新整理功能清空已緩衝的內容,然後再次訪問資源。具體請參見重新整理和預熱資源。
檢查來源站點設定:確認來源站點不會返回與CDN配置衝突的跨域回應標頭。建議將來源站點回源回應標頭與節點回應標頭中的跨域頭設定為也一致,如果配置不一致,可能會導致衝突。
清除瀏覽器緩衝:清空瀏覽器緩衝,或使用無痕(隱私)模式測試,確保瀏覽器擷取最新的回應標頭。
聯絡支援人員:如果您嘗試了上述所有方法,但問題仍然存在,可能是CDN服務方面的問題。請聯絡阿里雲CDN的支援人員或提交工單尋求協助。
節點HTTP回應標頭和回源HTTP回應標頭有什麼區別?
節點HTTP回應標頭和回源HTTP回應標頭雖然都是HTTP回應標頭,但它們是兩個不同的概念,代表了在緩衝架構中不同環節所返回的HTTP頭部資訊。
節點HTTP回應標頭:是由CDN節點發送給用戶端(如瀏覽器)的HTTP回應標頭。當CDN節點在接收到用戶端請求時,如果該節點上已經有緩衝的內容,就會直接將這些內容連同相應的HTTP頭部資訊一起返回給用戶端。這個過程不需要CDN節點向來源站點發起新的請求。
回源HTTP回應標頭:是來源站點發送給CDN節點的HTTP回應標頭。當CDN節點上的緩衝到期或者沒有命中緩衝時,CDN節點會向來源站點發起請求來擷取最新內容。來源站點返回的內容以及相關的HTTP頭部資訊就是回源回應標頭。這些頭部資訊被CDN節點接收並處理,之後可能被儲存下來以便下次使用。
因此,節點HTTP回應標頭和回源HTTP回應標頭的區別在於它們的應用情境和控制的對象不同。節點HTTP回應標頭主要用於控制用戶端和CDN節點的緩衝行為,而回源HTTP回應標頭則主要用於控制來源站點與CDN節點之間的緩衝行為。在實際應用中,它們通常會共同使用,以實現高效、精確的緩衝控制。關於節點HTTP回應標頭的更多資訊,請參見配置回源HTTP回應標頭。
異常狀態代碼緩衝規則是什嗎?
對於204、305、400、403、404、405、414、500、501、502、503和504狀態代碼,緩衝規則如下圖所示:
開啟配置Range回源功能,緩衝規則如下:
非200、206狀態代碼(包含但不限於204、305、400、403、404、405、414、500、501、502、503和504狀態代碼)的情況下,均不緩衝。
200、206狀態代碼按照阿里雲CDNDCDN預設緩衝規則及優先順序進行緩衝。
收到5xx狀態代碼會刪除已緩衝的分區檔案(回源逾時不會刪除快取檔案)。
說明Range回源情況下,來源站點會把一個大檔案分割成多個小的檔案分區來返回給CDN節點。比如有個檔案被分割成了10個分區,CDN節點已經緩衝了5個分區,在請求第6個分區時,來源站點響應了5xx狀態代碼,這時會把前面已經緩衝的5個分區全部刪除。
未開啟配置Range回源功能,按照如下規則緩衝:
如果來源站點返回
set-cookie
回應標頭,CDN不緩衝。如果來源站點沒有返回
Set-Cookie
回應標頭,則遵循CDN控制台配置的狀態代碼到期時間來緩衝,配置多條規則時生效方式請參考多條規則生效優先順序說明。如果來源站點沒有返回
Set-Cookie
回應標頭,CDN控制台也沒有配置狀態代碼到期時間,則按照來源站點設定的Pragma
、Cache-Control
或者Expires
回應標頭來緩衝。如果來源站點沒有返回
Set-Cookie
、Pragma
、Cache-Control
或者Expires
回應標頭,CDN控制台也沒有配置狀態代碼到期時間,則預設緩衝1秒。
對於303、304、401、407、600和601狀態代碼,CDN均不進行緩衝。