本文為您介紹CDN緩衝相關的常見問題。
CDN緩衝清理機制是什嗎?
緩衝在CDN節點上的資源,如果該資源的訪問熱度較低(同一個CDN節點上的同一個資源被用戶端訪問的頻次較低),那麼很可能會在緩衝到期之前被CDN節點上其他訪問熱度較高的資源覆蓋。
CDN預設的緩衝規則是什嗎?
CDN節點在收到來源站點響應的檔案資源的時候,會按照以下的緩衝規則來執行(數值越小,優先順序越高):

來源站點響應
pragma:no-cache、cache-control:no-cache(或者no-store,或者max-age=0)時,CDN遵循來源站點的策略,完全不緩衝資源。CDN控制台設定的緩衝到期時間或者狀態代碼到期時間。
說明若CDN請求同時命中多條規則,有且僅有一條規則會生效,優先順序為:權重>規則建立時間。
有多條緩衝規則的情況下,建議每條緩衝規則都設定不同的權重(權重越大優先順序越高),通過權重來控制規則執行優先順序。
權重相同的規則生效優先順序:先建立的>後建立的,與規則類型無關。
來源站點配置其他緩衝規則,優先順序由高至低為:
cache-control>expires>last-modified>ETag。如果來源站點響應中攜帶了
cache-control,參數值包含max-age或s-maxage,並且max-age或s-maxage的值大於0,則使用cache-control設定緩衝到期時間,例如:cache-control:max-age=3600。如果同時存在max-age和s-maxage,則以s-maxage的值為準。如果來源站點響應中沒有攜帶
cache-control,但是攜帶了Expires,則使用Expires設定緩衝到期時間,例如:expires:Tue, 25 Nov 2031 17:25:43 GMT。如果來源站點響應中沒有攜帶
cache-control和Expires,但是攜帶了last-modified,則使用以下規則來計算緩衝時間:使用公式(目前時間-last-modified)* 0.1,計算結果在10秒~3600秒及之間的,取計算結果時間;小於10秒的,按照10秒處理;大於3600秒的,按照3600秒處理。如果來源站點響應中沒有攜帶
cache-control、Expires和last-modified,但是攜帶了ETag,緩衝10秒。
如果來源站點返回的資料中,
cache-control、expires、last-modified和ETag這些緩衝策略相關的回應標頭都沒有攜帶,則預設不緩衝。
如何判斷CDN緩衝是否成功?
阿里雲CDN對於檔案是否支援緩衝,您可以通過檢查HTTP回應標頭中的相關欄位來判斷。
X-Cache: 表示請求是否命中CDN緩衝。值為HIT表示命中,MISS或者欄位不存在表示未命中。Age: 表示檔案在CDN節點上緩衝的時間(秒)。檔案被重新整理或首次訪問無此欄位。Age為0表示緩衝到期,需回源校正。X-Swift-CacheTime: 表示檔案在CDN節點上的允許緩衝時間。計算剩餘緩衝時間:X-Swift-CacheTime–Age。X-Swift-SaveTime:表示資源首次被緩衝到CDN節點上的時間(GMT)。轉換為中國北京時間需加上8小時。
為了查看這些HTTP回應標頭,您可以通過以下兩種方式查看您的內容是否緩衝到CDN:
方式1:使用瀏覽器的開發人員工具(如Chrome的開發人員工具)

方式2:使用curl命令查看資源緩衝情況
curl "http://example.com/path/to/response.html" -v
如何解決URL的傳遞參數為變數導致CDN快取命中率低的問題?
可能是因為沒有開啟CDN的忽略參數功能,詳情請參見URL的傳遞參數為變數導致CDN快取命中率低。
如何設定檔案不緩衝直接回源?
根據您的需求,針對不希望緩衝的資源,按照目錄、檔案路徑、檔案類型設定對應的緩衝時間,設定如下:
类型:選擇目录或文件后缀名。
地址:填寫您不想緩衝的具體資源路徑或檔案名稱尾碼,例如
php,jsp,asp類型的動態檔案和admin目錄下的所有檔案。过期时间:設定為“0”,表示不緩衝該類型的資源。
权重:可按照需要調整權重值,權重越高,優先順序越強。
詳情請參見配置CDN緩衝到期時間。

在CDN控制台緩衝到期時間設定為0,為何訪問到的資源仍然不是最新內容?
在CDN控制台將緩衝到期時間設定為0,目的是每次請求都直接回來源站點擷取最新內容。然而,如果您發現訪問到的資源仍然不是最新的內容,可能有幾個原因:
瀏覽器本機快取:瀏覽器可能緩衝了舊內容。建議清除瀏覽器緩衝或使用無痕模式測試。
配置生效延遲:設定緩衝時間為0後,可能需要時間讓所有CDN節點生效。另外,如果CDN節點未檢測到更改,可能仍返回舊緩衝。
來源站點緩衝未重新整理:來源站點伺服器可能有緩衝機制,未及時更新時,CDN節點回源可能擷取舊緩衝。
節點緩衝清除延遲:修改配置前已緩衝的資源可能需要時間清除。您可以手動重新整理緩衝,確保立即擷取最新內容,詳情請參見操作指南。
來源站點變更檔案後,CDN節點上的緩衝會主動、即時更新嗎?
來源站點變更檔案後,CDN節點上的緩衝不會主動、即時更新。緩衝更新取決於配置的緩衝策略。
CDN節點根據配置的緩衝到期時間更新緩衝。如果緩衝未到期,來源站點變更檔案不會立即反映在CDN緩衝中,詳情請參見配置CDN緩衝到期時間。
您可以通過CDN提供的重新整理緩衝手動清除緩衝,使下一次請求回源擷取最新的內容。
影響CDN快取命中率下降的因素有哪些?
影響阿里雲CDN快取命中率下降的因素如下:
重新整理緩衝:手動或自動重新整理快取作業可能導致短時間內命中率下降。
頻寬突增:當頻寬在短時間內大幅度增加時,會導致CDN節點回源請求增多,從而降低快取命中率。
CDN節點訪問新內容:如果CDN節點頻繁訪問首次請求的新內容,也會導致回源較多,進而表現出快取命中率的下降趨勢。
緩衝規則調整:對CDN緩衝策略進行修改或調整可能會影響快取命中率,例如未配置合適的緩衝到期時間或者緩衝原則設定不當。
URL中帶有可變參數:URL中問號(?)後的參數變化會導致不同的URL請求被視為不同的資源,即使實際指向的是同一份內容,這也會造成CDN快取命中率降低。
未合理配置緩衝到期時間:對於不同更新頻率的靜態檔案,如未根據實際情況設定合理的緩衝到期時間,可能會導致緩衝資源過早失效,從而影響快取命中率。
更多情境關於影響快取命中率的因素介紹請參見提高CDN快取命中率。具體可參見重新整理和預熱資源、忽略參數和配置CDN緩衝到期時間。
如何排查CDN快取命中率較低的問題?
快取命中率低會導致載入速度變慢和來源站點負載增加。請參見CDN快取命中率較低排查方法。
如何設定緩衝全域生效?
您可以通過設定緩衝到期時間來實現緩衝全域生效。設定時,类型選擇目录後,在地址欄用正斜線(/)匹配所有目錄。具體操作請參見配置CDN緩衝到期時間。
緩衝配置為什麼沒有生效?
如果您配置了緩衝規則,在使用過程中發現此緩衝規則未生效,可能是以下原因:
生效延遲:緩衝規則的修改或新增通常需要一段時間才會生效,請您在規則生效後再驗證。
緩衝更新機制:新規則不會立即應用到已緩衝的內容,需要等到原緩衝到期後才會生效。
緩衝重新整理操作未執行:更改緩衝設定後,如果沒有手動重新整理緩衝,舊的緩衝內容將繼續被提供給使用者,直到自然到期。詳情請參見重新整理和預熱資源。
緩衝回應標頭設定不當:檢查來源站點發送的HTTP回應標頭裡的
Cache-Control和Expires標題是否正確設定。緩衝規則有優先順序:若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等回源回應標頭,但用戶端仍遇到跨域問題且回應標頭中沒有這些配置,可能原因如下:
可能的原因
配置未生效或錯誤:配置未正確設定或尚未生效。
CDN緩衝:CDN節點緩衝了舊的回應標頭。
來源站點問題:來源站點的跨域回應標頭與CDN配置衝突。
瀏覽器緩衝:瀏覽器緩衝了舊的響應。
解決方案
驗證配置:確認CDN配置已正確設定並生效。
清除CDN緩衝:使用CDN的重新整理功能清空緩衝,然後再次訪問資源。具體請參見重新整理和預熱資源。
檢查來源站點設定:確認來源站點不會返回與CDN配置衝突的跨域回應標頭。建議統一來源站點和CDN的跨域頭設定。
清除瀏覽器緩衝:清空瀏覽器緩衝,或使用無痕模式測試。
聯絡支援人員:如果問題仍然存在,請聯絡阿里雲CDN支援人員。
異常狀態代碼緩衝規則是什嗎?
對於204、305、404、405、414、424、429、500、501、502、503和504狀態代碼,緩衝規則如下:
如果來源站點返回
set-cookie回應標頭,CDN不緩衝。如果來源站點沒有返回Set-Cookie回應標頭,則遵循CDN控制台配置的狀態代碼到期時間來緩衝,配置多條規則時生效方式請參考多條規則生效優先順序說明。
如果來源站點沒有返回Set-Cookie回應標頭,CDN控制台也沒有配置狀態代碼到期時間,則按照來源站點設定的Pragma、Cache-Control或者Expires回應標頭來緩衝。
如果來源站點沒有返回Set-Cookie、Pragma、Cache-Control或者Expires回應標頭,CDN控制台也沒有配置狀態代碼到期時間,則預設緩衝1秒。
對於302、307和403狀態代碼,緩衝規則如下:
如果來源站點返回
set-cookie回應標頭,CDN不緩衝。如果來源站點沒有返回Set-Cookie回應標頭,則遵循CDN控制台配置的狀態代碼到期時間來緩衝,配置多條規則時生效方式請參考多條規則生效優先順序說明。
如果來源站點沒有返回Set-Cookie回應標頭,CDN控制台也沒有配置狀態代碼到期時間,則按照來源站點設定的Pragma、Cache-Control或者Expires回應標頭來緩衝。
如果來源站點沒有返回Set-Cookie、Pragma、Cache-Control或者Expires回應標頭,CDN控制台也沒有配置狀態代碼到期時間,不緩衝。
針對304狀態代碼,CDN將不進行緩衝,且無法通過任何方式設定緩衝時間。
出站回應標頭和入站回應標頭有什麼區別?
出站回應標頭和入站回應標頭在緩衝架構中代表不同環節的HTTP頭部資訊。
出站回應標頭:由CDN節點發送給用戶端(如瀏覽器)的HTTP回應標頭。當CDN節點有緩衝內容時,會直接返回給用戶端,無需向來源站點請求。
入站回應標頭:由來源站點發送給CDN節點的HTTP回應標頭。當CDN節點的緩衝到期或未命中時,CDN點會向來源站點請求最新內容,來源站點返回的內容及相關HTTP頭部資訊就是入站回應標頭。
因此,出站回應標頭和入站回應標頭的區別在於它們的應用情境和控制對象不同。出站回應標頭用於控制用戶端和CDN節點的緩衝行為,而入站回應標頭用於控制來源站點與CDN節點之間的緩衝行為。它們通常共同使用,以實現高效、精確的緩衝控制。關於入站回應標頭的更多資訊,請參見修改入站回應標頭。
如何配置整個網域名稱不緩衝?
為了配置阿里雲CDN整個網域名稱不緩衝,您可以通過設定全路徑緩衝到期時間為0來實現。以下是具體步驟:
登入CDN控制台。
在左側導覽列,單擊域名管理。
在域名管理頁面,找到目標網域名稱,單擊操作列的管理。
在指定網域名稱的左側導覽列,單擊缓存配置。
在缓存过期时间頁簽下,單擊添加。
类型:選擇目录。
地址:填寫
/,表示全部路徑。过期时间:填寫
0秒。其他參數保持預設選項。
單擊確定,完成配置。
若阿里雲CDN請求同時命中多條規則,有且僅有一條規則會生效,優先順序為:權重>規則建立時間。
如果缓存过期时间中有多條規則,請保證全網域名稱不緩衝規則的权重最高(此時優先順序最高)。

CDN是否支援多副本緩衝?如何?CDN的多副本緩衝?
CDN支援預設多副本緩衝。此時來源站點需要攜帶Vary頭來告知CDN節點需要用哪個要求標頭的值來做多副本。
以壓縮為例,當用戶端發送 Accept-Encoding: gzip 時,來源站點會返回經過 gzip 壓縮的內容;而如果用戶端發送的是 Accept-Encoding: br,來源站點則返回使用 Brotli 壓縮的內容。為了緩衝這些不同版本的響應,就需要來源站點在響應中添加 Vary 頭,明確告知緩衝系統根據哪個要求標頭來區分不同的副本。在本例中,來源站點應設定 Vary: Accept-Encoding,表明需要根據 Accept-Encoding 的值來儲存和提供不同的快取複本。
CDN如何配置子目錄訪問首頁?
通過訪問子目錄名來返回預設的子目錄首頁是網站常見的操作之一,在CDN上也可以實現這個能力,減少來源站點改動。
例如,首頁檔案是https://www.example.com/cdn/index.html,該方案可以實現訪問https://www.example.com/cdn、https://www.example.com/cdn/子目錄也可以返回首頁檔案。
確認來源站點
先確認來源站點的子目錄首頁具體檔案可以訪問,例如https://www.example.com/cdn/index.html可以正常訪問到。
配置子目錄重寫
登入CDN控制台。
在左側導覽列,單擊域名管理。
在域名管理頁面,找到目標網域名稱,單擊操作列的管理。
在指定網域名稱的左側導覽列,單擊缓存配置。
單擊重寫訪問URL頁簽。
單擊添加,根據您的實際需求,配置訪問URL重寫參數。
配置兩條規則,分別針對結尾是
/和結尾不是/的進行匹配:規則1:待重寫的Path:
^/(.+)/$;目標Path:/$1/index.html;執行規則:Break。規則2:待重寫的Path:
^/([^.?#]+)$;目標Path:/$1/index.html;執行規則:Break。
