AEM中的快取控制和CDN/Dispatcher快取設定問題

AEM Dispatcher和下游CDN (例如Fastly和Akamai)會傳回非預期的快取行為:不符合預期TTL的Cache-Control值、只會快取動態內容的第一個變數、沒有Cache-Control標頭的Dynamic Media URL,以及失效後仍存在的過時回應。 記錄中未出現任何錯誤 — 問題會顯示在HTTP回應標頭或不一致的快取行為中。 原因不正確或在Dispatcher或CDN層缺少快取控制設定或快取金鑰邏輯,因為CDN會遵循上游標頭,並且在未設定這些標頭時無法預測地快取。 在Dispatcher中設定明確的Cache-Control標頭,針對動態變化調整快取金鑰,以及設定Dynamic Media資產的規則集以還原正確、可預測的快取。

說明 description

環境:

  • Adobe Experience Manager as a Cloud Service
  • Adobe Experience Manager Managed Services
  • Adobe Experience Manager內部部署
  • AEM Dispatcher和Apache HTTP Server
  • CDN圖層,例如Fastly和Akamai
  • Dynamic Media (Scene7)

問題/症狀:

  • 快取控制值(例如max-ages-maxage)不符合預期值(例如max-age=300max-age=60, s-maxage=7200的預設值)。
  • CDN只會快取動態呈現內容的第一個變化。
  • Dynamic Media (Scene7) URL未傳回Cache-Control標頭。
  • Dispatcher或CDN會持續提供快取回應,即使在預期失效後亦然。
  • 您無法略過CDN或Dispatcher來檢視原始輸出。

根本原因:

根本原因為Dispatcher或CDN層的Cache-Control標題或快取金鑰邏輯設定不正確或遺失。 Fastly和Akamai等CDN會遵循上游快取控制標題,而Dispatcher預設會影響CDN快取的內容,因此當標題未明確設定時,CDN會快取非預期的回應。 當快取索引鍵不會因使用者特定的屬性而有所差異時,動態內容會被快取。 Dynamic Media和Scene7需要規則集設定才能產生Cache-Control標頭。

如何確認

  1. 從瀏覽器或使用curl檢查目前的Cache-Control標頭。 執行curl -I https://example.com/path/to/page.html並檢查Cache-Control值,例如public, max-age=60, s-maxage=7200max-age=300。 確認符合您生產時的預期。 如果標題完全遺失,請在解析度中套用明確設定。
  2. 檢查CDN是否單獨依URL快取。 要求同一URL兩次,必須是不同的動態輸出。 如果兩個回應相同,CDN或Dispatcher只會快取第一個變數。
  3. 略過快取以檢視原始輸出。 將查詢引數附加至URL (例如https://example.com/page.html?q=123),以略過CDN和Dispatcher。 回應會傳回原始發行者輸出,您可將其與快取回應進行比較。

解決方法 resolution

請依照下列步驟解決問題:

  1. 在Dispatcher設定中設定Cache-Control值。 更新定義Cache-Control標頭的規則。 在AEM as a Cloud Service上,編輯專案存放庫中的Dispatcher程式碼,並透過Cloud Manager部署。 在Managed Services和內部部署上,更新伺服器上或透過Cloud Manager管道的Apache和Dispatcher設定。 部署後,再次執行curl -I以確認標頭反映更新的TTL。
  2. 視需要設定動態變數的快取。 如果內容因引數而異,請在Dispatcher規則中設定的快取索引鍵中加入必要的查詢引數或Cookie。 使用不同的引數傳送多個請求,並確認CDN傳回不同的回應。
  3. 設定Dynamic Media和Scene7資產的Cache-Control標頭。 使用Dynamic Media和Scene7規則集,以您想要的max-age=N值設定Cache-Control標頭。 在Dynamic Media URL (例如is/image/...)上執行curl -I,並驗證Cache-Control標頭是否顯示。
  4. 清除或略過快取以驗證結果。 組態變更後,再次執行curl -I並確認Cache-Control標頭符合所需的TTL。 在有CDN偵錯標題可用的情況下,驗證CDN會傳回更新的TTL,並透過請求多個使用者或引數的內容來確認動態變化。

如果問題仍然存在

請聯絡Adobe支援,提供受影響的URL的curl -I輸出、控制Cache-Control的Dispatcher設定片段、CDN層詳細資料(例如Akamai或Fastly),以及預期與實際行為的說明。

相關閱讀

recommendation-more-help
experience-cloud-kcs-help-kbarticles