本文由簡體中文內容自動轉碼而成。阿里雲不保證此自動轉碼的準確性、完整性及時效性。本文内容請以簡體中文版本為準。

緩衝相關常見問題

更新時間:2025-01-07 19:04

本文為您介紹CDN緩衝相關的常見問題。

CDN緩衝清理機制是什嗎?

緩衝存在CDN節點上的資源,如果該資源的訪問熱度較低(同一個CDN節點上的同一個資源被用戶端訪問的頻次較低),那麼很可能會在緩衝到期之前被CDN節點上其他訪問熱度較高的資源覆蓋

CDN預設的緩衝規則是什嗎?

CDN節點在收到來源站點響應的靜態檔案資源的時候,會按照以下的緩衝規則來執行(數值越小,優先順序越高):緩衝優先順序

  1. 來源站點響應pragma:no-cachecache-control:no-cache(或者no-store,或者max-age=0)時,不緩衝。

  2. CDN控制台設定的緩衝到期時間或者狀態代碼到期時間。

    說明

    CDN請求同時命中多條規則,有且僅有一條規則會生效,優先順序為:權重>規則建立時間。

    • 有多條緩衝規則的情況下,建議每條緩衝規則都設定不同的權重(權重越大優先順序越高),通過權重來控制規則執行優先順序。

    • 權重相同的規則生效優先順序:先建立的>後建立的,與規則類型無關。

  3. 來源站點配置其他緩衝規則,優先順序由高至低為:cache-control>expires>last-modified>ETag

    1. 來源站點響應中使用cache-control設定到期時間,取值為max-ages-maxage,並且max-ages-maxage的值大於0,例如:cache-control:max-age=3600。如果同時存在max-ages-maxage,則以s-maxage的值為準。

    2. 來源站點響應中使用expires設定到期時間,例如:expires:Tue, 25 Nov 2031 17:25:43 GMT。

    3. 來源站點響應中攜帶了ETaglast-modified,則使用以下規則來計算緩衝時間:

      1. last-modified,使用公式(目前時間-last-modified)* 0.1,計算結果在10秒~3600秒之間的,取計算結果時間;小於10秒的,按照10秒處理;大於3600秒的,按照3600秒處理。

      2. 只有ETag,緩衝10秒。

  4. 來源站點返回的資料中ETaglast-modifiedcache-controlexpires這些緩衝相關的回應標頭都沒有攜帶,則預設不緩衝。

如何判斷CDN緩衝是否成功?

阿里雲CDN對於檔案是否支援緩衝,您可以通過檢查HTTP回應標頭中的相關欄位來判斷。

  1. X-Cache: 表示請求是否命中CDN緩衝。值為HIT表示命中,MISS或者欄位不存在表示未命中。

  2. Age: 表示檔案在CDN節點上緩衝的時間(秒)。檔案被重新整理或首次訪問無此欄位。Age為0表示緩衝到期,需回源校正。

  3. X-Swift-CacheTime: 表示檔案在CDN節點上的允許緩衝時間。計算剩餘緩衝時間:X-Swift-CacheTime Age

  4. X-Swift-SaveTime:表示資源首次被緩衝到CDN節點上的時間(GMT)。轉換為中國北京時間需加上8小時。

為了查看這些HTTP回應標頭,您可以通過以下兩種方式查看您的內容是否緩衝到CDN

方式1:使用瀏覽器的開發人員工具(如Chrome的開發人員工具)

image.png

方式2:使用curl命令查看資源緩衝情況

curl "http://example.com/path/to/response.html" -voa

image.png

如何解決URL的傳遞參數為變數導致CDN快取命中率低的問題?

可能是因為沒有開啟CDN的忽略參數功能,詳情請參見URL的傳遞參數為變數導致CDN快取命中率低

如何設定檔案不緩衝直接回源?

根據您的需求,針對不希望緩衝的資源,按照目錄、檔案路徑、檔案類型設定對應的緩衝時間,設定如下:

  • 类型:選擇目录文件后缀名

  • 地址:填寫您不想緩衝的具體資源路徑或檔案名稱尾碼,例如php,jsp,asp類型的動態檔案和admin目錄下的所有檔案。

  • 过期时间:設定為“0”,表示不緩衝該類型的資源。

  • 权重:可按照需要調整權重值,權重越高,優先順序越強。

詳情請參見配置緩衝到期時間

image.png

CDN控制台緩衝到期時間設定為0,為何訪問到的資源仍然不是最新內容?

CDN控制台將緩衝到期時間設定為0,目的是每次請求都直接回來源站點擷取最新內容。然而,如果您發現訪問到的資源仍然不是最新的內容,可能有幾個原因:

  1. 瀏覽器本機快取:瀏覽器可能緩衝了舊內容。建議清除瀏覽器緩衝或使用無痕模式測試。

  2. 配置生效延遲:設定緩衝時間為0後,可能需要時間讓所有CDN節點生效。另外,如果CDN節點未檢測到更改,可能仍返回舊緩衝。

  3. 來源站點緩衝未重新整理:來源站點伺服器可能有緩衝機制,未及時更新時,CDN節點回源可能擷取舊緩衝。

  4. 節點緩衝清除延遲:修改配置前已緩衝的資源可能需要時間清除。您可以手動重新整理緩衝,確保立即擷取最新內容,詳情請參見重新整理或預熱資源

來源站點變更檔案後,CDN節點上的緩衝會主動、即時更新嗎?

來源站點變更檔案後,CDN節點上的緩衝不會主動、即時更新。緩衝更新取決於配置的緩衝策略。

影響CDN快取命中率下降的因素有哪些?

影響阿里雲CDN快取命中率下降的因素如下:

  1. 重新整理緩衝:手動或自動重新整理快取作業可能導致短時間內命中率下降。

  2. 頻寬突增:當頻寬在短時間內大幅度增加時,會導致CDN節點回源請求增多,從而降低快取命中率。

  3. CDN節點訪問新內容:如果CDN節點頻繁訪問首次請求的新內容,也會導致回源較多,進而表現出快取命中率的下降趨勢。

  4. 緩衝規則調整:對CDN緩衝策略進行修改或調整可能會影響快取命中率,例如未配置合適的緩衝到期時間或者緩衝原則設定不當。

  5. URL中帶有可變參數:URL中問號(?)後的參數變化會導致不同的URL請求被視為不同的資源,即使實際指向的是同一份內容,這也會造成CDN快取命中率降低。

  6. 未合理配置緩衝到期時間:對於不同更新頻率的靜態檔案,如未根據實際情況設定合理的緩衝到期時間,可能會導致緩衝資源過早失效,從而影響快取命中率。

更多情境關於影響快取命中率的因素介紹請參見提高CDN快取命中率。具體可參見重新整理和預熱資源忽略參數配置緩衝到期時間

如何排查CDN快取命中率較低的問題?

快取命中率低會導致載入速度變慢和來源站點負載增加。請參見CDN快取命中率較低排查方法

如何設定緩衝全域生效?

您可以通過設定緩衝到期時間來實現緩衝全域生效。設定時,类型選擇目录後,在地址欄用正斜線(/)匹配所有目錄。具體操作請參見配置緩衝到期時間

緩衝配置為什麼沒有生效?

如果您配置了緩衝規則,在使用過程中發現此緩衝規則未生效,可能是以下原因:

  1. 生效延遲:緩衝規則的修改或新增通常需要一段時間才會生效,請您在規則生效後再驗證。

  2. 緩衝更新機制:新規則不會立即應用到已緩衝的內容,需要等到原緩衝到期後才會生效。

  3. 緩衝重新整理操作未執行:更改緩衝設定後,如果沒有手動重新整理緩衝,舊的緩衝內容將繼續被提供給使用者,直到自然到期。詳情請參見重新整理和預熱資源

  4. 緩衝回應標頭設定不當:檢查來源站點發送的HTTP回應標頭裡的Cache-ControlExpires標題是否正確設定。

  5. 緩衝規則有優先順序:若CDN請求同時命中多條規則,優先順序為:權重>規則建立時間。

    • 有多條緩衝規則的情況下,建議每條緩衝規則都設定不同的權重(權重越大優先順序越高),通過權重來控制規則執行優先順序。

    • 權重相同的規則生效優先順序:先建立的>後建立的,與規則類型無關。

    配置樣本:為加速網域名稱demo.aliyun.com配置以下緩衝策略,CDN節點回源下載資源http://demo.aliyun.com/image/example.png,雖然以下兩條規則都匹配到了,但是因為這兩條規則的權重相同,因此要判斷規則建立的時間,先建立的規則優先順序高於後建立的,因為目錄/image這條規則建立的時間更早,所以系統最終生效的是目錄類型這條規則。image.png

通過HTTP回應標頭配置CDN跨域資源共用(CORS)及注意事項

設定適當的HTTP回應標頭,允許來自不同源的請求訪問資源,詳情請參見配置跨域資源共用

為什麼已經配置了回應標頭Access-Control-Allow-Origin,但是訪問資源仍提示跨域問題,response header中沒有配置的回應標頭?

如果您在阿里雲CDN中配置了Access-Control-Allow-Origin等回源回應標頭,但用戶端仍遇到跨域問題且回應標頭中沒有這些配置,可能原因如下:

可能的原因

  1. 配置未生效或錯誤:配置未正確設定或尚未生效

  2. CDN緩衝:CDN節點緩衝了舊的回應標頭。

  3. 來源站點問題:來源站點的跨域回應標頭與CDN配置衝突。

  4. 瀏覽器緩衝:瀏覽器緩衝了舊的響應。

解決方案

  1. 驗證配置:確認CDN配置已正確設定並生效。

  2. 清除CDN緩衝:使用CDN的重新整理功能清空緩衝,然後再次訪問資源。具體請參見重新整理和預熱資源

  3. 檢查來源站點設定:確認來源站點不會返回與CDN配置衝突的跨域回應標頭。建議統一來源站點和CDN的跨域頭設定。

  4. 清除瀏覽器緩衝:清空瀏覽器緩衝,或使用無痕模式測試。

  5. 聯絡支援人員:如果問題仍然存在,請聯絡阿里雲CDN支援人員。

節點HTTP回應標頭和回源HTTP回應標頭有什麼區別?

節點HTTP回應標頭和回源HTTP回應標頭在緩衝架構中代表不同環節的HTTP頭部資訊。

  • 節點HTTP回應標頭:由CDN節點發送給用戶端(如瀏覽器)的HTTP回應標頭。當CDN節點有緩衝內容時,會直接返回給用戶端,無需向來源站點請求。

  • 回源HTTP回應標頭:由來源站點發送給CDN節點的HTTP回應標頭。當CDN節點的緩衝到期或未命中時,CDN點會向來源站點請求最新內容,來源站點返回的內容及相關HTTP頭部資訊就是回源回應標頭。

因此,節點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回源時,按照如下規則緩衝:

      1. 如果來源站點返回set-cookie回應標頭,CDN不緩衝。

      2. 如果來源站點沒有返回Set-Cookie回應標頭,則遵循CDN控制台配置的狀態代碼到期時間來緩衝,配置多條規則時生效方式請參考多條規則生效優先順序說明

      3. 如果來源站點沒有返回Set-Cookie回應標頭,CDN控制台也沒有配置狀態代碼到期時間,則按照來源站點設定的PragmaCache-Control或者Expires回應標頭來緩衝。

      4. 如果來源站點沒有返回Set-CookiePragmaCache-Control或者Expires回應標頭,CDN控制台也沒有配置狀態代碼到期時間,則預設緩衝1秒。

  • 對於303、304、401、407、600和601狀態代碼,CDN均不進行緩衝。

  • 本頁導讀 (1, M)
  • CDN緩衝清理機制是什嗎?
  • CDN預設的緩衝規則是什嗎?
  • 如何判斷CDN緩衝是否成功?
  • 如何解決URL的傳遞參數為變數導致CDN快取命中率低的問題?
  • 如何設定檔案不緩衝直接回源?
  • 在CDN控制台緩衝到期時間設定為0,為何訪問到的資源仍然不是最新內容?
  • 來源站點變更檔案後,CDN節點上的緩衝會主動、即時更新嗎?
  • 影響CDN快取命中率下降的因素有哪些?
  • 如何排查CDN快取命中率較低的問題?
  • 如何設定緩衝全域生效?
  • 緩衝配置為什麼沒有生效?
  • 通過HTTP回應標頭配置CDN跨域資源共用(CORS)及注意事項
  • 為什麼已經配置了回應標頭Access-Control-Allow-Origin,但是訪問資源仍提示跨域問題,response header中沒有配置的回應標頭?
  • 節點HTTP回應標頭和回源HTTP回應標頭有什麼區別?
  • 異常狀態代碼緩衝規則是什嗎?
文檔反饋