我想要指定 Amazon CloudFront 分佈快取物件的時間長度,因此我在原始伺服器上新增了 Cache-Control 或 Expires 標頭。不過,CloudFront 並未在我指定的時間內快取物件,或者 CloudFront 根本不會快取。
解決方法
確認您在 Cache-Control 或 Expires 標頭上設定的指令不會彼此衝突。最佳實務是使用 Cache-Control max-age 指令,而不是 Expires 標頭。如果您同時指定兩者的值,則 CloudFront 只會使用您為 Cache-Control max-age 設定的值。
確認您在 CloudFront 分佈上設定的最小 TTL、預設 TTL 和最大 TTL與 Cache-Control 或 Expires 標頭不衝突。
如果這些快取持續時間設定彼此衝突,CloudFront 可能不會在設定的時間內快取物件,或 CloudFront 可能完全不會快取。避免下列彼此衝突的快取持續時間設定範例:
- 將最大 TTL 設定為 5 分鐘 (300 秒),而 Cache-Control max-age 標頭設定為 1 小時 (3600 秒)。在此情況下,CloudFront 會快取物件 5 分鐘,而不是 1 小時。
- 將 Cache-Control max-age 標頭設定為 3 小時,而 Expires 標頭設定為 1 個月。在此情況下,CloudFront 會快取物件 3 小時,而不是 1 個月。
- 將「預設 TTL」、「最小 TTL」和「最大 TTL」設定為 0 秒。在此情況下,CloudFront 始終會驗證其具有來自來源的最新內容。
- 將「最小 TTL」設定為 60 秒、「預設 TTL」設定為 300 秒,而「最大 TTL」設定為 3600 秒。如果來源未提供快取標頭 (例如 Cache-Control max-age 或 Expires),則 CloudFront 會以預設 TTL 持續時間快取物件。
**重要事項:**如果您使用快取標頭更新來源資產,則 CloudFront 只有在 CloudFront 向您的來源發出新請求之後,才會反映變更。CloudFront 會在邊緣節點的快取資產到期時向您的來源發出新的請求。然後,您的分佈會收到資產的新請求。若要強制 CloudFront 在快取資產設定到期之前反映更新,請使快取失效。
相關資訊
物件快取
管理內容在快取中停留的時間長度 (到期)
控制 CloudFront 快取錯誤的時間長度