本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
管理內容在快取中停留的時間長度 (到期)
您可以控制檔案保留在 CloudFront 快取中的時間長度,然後再將另一個要求 CloudFront 轉寄至您的來源。降低持續時間允許您提供動態內容。增加持續時間表示您的使用者取得更好的效能,因為檔案更有可能是直接透過節點快取提供。較長的持續時間也能減少的原始伺服器的負載。
一般而言,會從邊緣位置 CloudFront 提供檔案,直到您指定傳遞的快取持續時間為止 — 也就是說,直到檔案過期為止。到期後,下次邊緣位置取得檔案的要求時,會將要求 CloudFront 轉送至原始位置,以確認快取是否包含檔案的最新版本。來自原始伺服器的回應取決於檔案是否已變更:
-
如果 CloudFront 快取已經有最新版本,來源會傳回狀態碼
304 Not Modified
。 -
如果 CloudFront 快取沒有最新版本,來源會傳回狀態碼
200 OK
和檔案的最新版本。
如果不經常要求邊緣位置中的檔案, CloudFront 可能會收回檔案 (在檔案到期日之前移除檔案),以便為最近要求的檔案騰出空間。
根據預設,每個檔案會自動在 24 小時候過期,但您可以透過兩種方式變更預設行為:
-
若要變更符合相同路徑模式的所有檔案的快取持續時間,您可以針對快取行為變更「最小 TTL」TTL、「最大」和「TTL預 CloudFront 設」的設定。如需有關個別設定的資訊,請參閱TTL中的最小值TTLTTL、最大值和預設值分佈設定參考。
-
若要變更個別檔案的快取持續期間,您可以設定原始伺服器來使用
max-age
或s-maxage
指示詞將Cache-Control
標頭,或是Expires
標頭欄位新增到檔案。如需詳細資訊,請參閱使用標頭控制個別物件的快取持續時間。
如需「最小值」TTL、「預設值 TTL」和「最大值」如何與和s-maxage
指示詞max-age
和Expires
標頭欄位TTL互動的詳細資訊,請參閱指定 CloudFront 快取物件的時間。
您還可以通過將另一個請求轉發到您的來源來控制錯誤(例如,404 Not Found
)在再次 CloudFront 嘗試獲取請求的對象之前停留在 CloudFront 緩存中的時間長度。如需詳細資訊,請參閱如何從您的來源 CloudFront 處理 HTTP 4xx 和 5xx 狀態碼。
使用標頭控制個別物件的快取持續時間
您可以使用 Cache-Control
和 Expires
標頭來控制物件在快取中保持多久的時間。[最小值] TTL、[預TTL設值] 和 [最大值] 的設定TTL也會影響快取持續時間,但以下是標頭如何影響快取持續時間的概觀:
-
此指
Cache-Control max-age
令可讓您指定物件在從原始伺服器再次取 CloudFront 得物件之前,要將物件保留在快取中的時間長度 (以秒為單位)。 CloudFront支持的最短到期時間為 0 秒。最長值為 100 年。請在下列格式中指定值:Cache-Control: max-age=
seconds
例如,下面的指令告訴 CloudFront 保持在緩存中的關聯對象 3600 秒(一小時):
Cache-Control: max-age=3600
如果您希望物件停留在 CloudFront Edge 快取中的持續時間與停留在瀏覽器快取記憶體中的持續時間不同,可以一起使用
Cache-Control max-age
和Cache-Control s-maxage
指令。如需詳細資訊,請參閱指定 CloudFront 快取物件的時間。 -
標
Expires
頭欄位可讓您使用 RFC2616「超文字傳輸通訊協定--HTTP /1.1 節 3.3.1, 完整日期」中指定的格式來指定到期日期和時間,例如: Sat, 27 Jun 2015 23:59:59 GMT
我們建議您使用 Cache-Control max-age
指令,而不是 Expires
標頭欄位來控制物件快取。如果您同時為Cache-Control max-age
和指定值Expires
,則僅CloudFront 使用的值Cache-Control max-age
。
如需詳細資訊,請參閱指定 CloudFront 快取物件的時間。
您無法在檢視器的GET
要求中使用HTTPCache-Control
或Pragma
標頭欄位 CloudFront 來強制返回物件的原始伺服器。 CloudFront 會忽略檢視器要求中的這些標頭欄位。
如需有關Cache-Control
和Expires
標頭欄位的詳細資訊,請參閱 RFC2616, 超文字傳輸通訊協定--/HTTP1.1 中的下列各節:
-
Section 14.9 Cache Control
(14.9 節快取控制) -
Section 14.21 Expires
(14.21 節過期)
提供過時(過期)內容
CloudFront 支持Stale-While-Revalidate
和Stale-If-Error
緩存控制指令。
-
該
stale-while-revalidate
指令 CloudFront 允許從緩存中提供過時的內容,同時從原始異步獲取新版本。這可改善延遲時間,因為使用者會立即從 CloudFront邊緣位置接收回應,而無需等待背景擷取,而且會在背景中載入新內容以供 future 要求使用。在下列範例中, CloudFront 快取回應一小時 (
max-age=3600
)。如果在此期間之後發出請求,則會在同時向來源發送請求以重新驗證和重新整理緩存內容的同時CloudFront 提供過時內容的內容。過時內容最多可提供 10 分鐘 (stale-while-revalidate=600
),同時內容會被重新驗證。Cache-Control: max-age=3600, stale-while-revalidate=600
注意
CloudFront 將提供過時的內容,達到
stale-while-revalidate
指令的值或 CloudFront 最大值TTL,以較低者為準。 -
如果來源無法訪問,或返回介於 500 和 600 之間的錯誤代碼,該
stale-if-error
指令允許 CloudFront 從緩存中提供過時的內容。這可確保檢視者即使在原始伺服器中斷期間也能存取內容。在下列範例中, CloudFront 快取回應一小時 (
max-age=3600
)。如果來源已關閉或在此期間之後傳回錯誤,則會 CloudFront 持續為過時內容提供長達 24 小時 (stale-if-error=86400
)。Cache-Control: max-age=3600, stale-if-error=86400
注意
CloudFront 將提供過時的內容,達到
stale-if-error
指令的值或 CloudFront 最大值TTL,以較低者為準。同時設定
stale-if-error
和自訂錯誤回應時,如果在指定的stale-if-error
持續時間內發生錯誤, CloudFront 首先會嘗試提供過時內容。如果無法使用過時內容,或內容超出stale-if-error
持續時間,則會 CloudFront 提供針對對應錯誤狀態碼設定的自訂錯誤回應。
- 兩者一起使用
-
stale-while-revalidate
與stale-if-error
是獨立的快取控制指令,可以一起使用以減少延遲,並為原始伺服器新增緩衝區以便回應或復原。在下列範例中, CloudFront 快取回應一小時 (
max-age=3600
)。如果在此期間之後提出要求,則在重新驗證內容時,最多可CloudFront 提供 10 分鐘的過時內容 (stale-while-revalidate=600
)。如果原始伺服器在 CloudFront 嘗試重新驗證內容時傳回錯誤,則會 CloudFront 持續提供過時內容長達 24 小時 ()stale-if-error=86400
。Cache-Control: max-age=3600, stale-while-revalidate=600, stale-if-error=86400
提示
快取是效能和更新狀態之間的平衡。使用類似 stale-while-revalidate
與 stale-if-error
指令可增強效能和使用者體驗,但請確保組態與您希望內容的更新狀態保持一致。過時內容指令最適合需要重新整理內容但不需要最新版本的使用案例。此外,如果您的內容沒有變更或很少變更,stale-while-revalidate
可能會新增不必要的網路要求。反之,請考慮設定較長的快取持續時間。
指定 CloudFront 快取物件的時間
若要控制在快取中 CloudFront 保留物件的時間長度,然後再傳送另一個要求給原始伺服器,您可以:
-
設定 CloudFront 發行版快取行為中的最小TTL值、最大值和預設值。您可以在連接至快取行為的快取政策 (建議使用) 或舊版快取設定中設定這些值。
-
在來自原始伺服器的回應中包含
Cache-Control
或Expires
標頭。這些標頭還有助於確定瀏覽器在向瀏覽器發送另一個請求之前在瀏覽器緩存中保留對象的時間長度 CloudFront。
下表說明從來源傳送的Cache-Control
和Expires
標頭如何搭配快取行為中的TTL設定,以影響快取。
原始標頭 | 最小值 TTL = 0 | 最小值 TTL > 0 |
---|---|---|
原始伺服器將 |
CloudFront 快取 CloudFront 快取 瀏覽器快取 瀏覽器會快取 |
CloudFront 快取 CloudFront 緩存取決於最小值TTL和 CloudFront 最大值TTL和指
瀏覽器快取 瀏覽器會快取 |
原始伺服器不會將 |
CloudFront 快取 CloudFront 快取預設值的物 CloudFront 件TTL。 瀏覽器快取 取決於瀏覽器。 |
CloudFront 快取 CloudFront 快取物件的最小值TTL或預設CloudFront 值中較大的值TTL。 瀏覽器快取 取決於瀏覽器。 |
原始伺服器將 |
CloudFront 快取 CloudFront 快取 瀏覽器快取 瀏覽器會快取 |
CloudFront 快取 CloudFront 緩存取決於最小值TTL和 CloudFront 最大值TTL和指
瀏覽器快取 瀏覽器會快取 |
原始伺服器將 |
CloudFront 快取 CloudFront 快取物件TTL,直到 瀏覽器快取 瀏覽器會快取物件直到 |
CloudFront 快取 CloudFront 緩存取決於最小值TTL和 CloudFront 最大值TTL和標
瀏覽器快取 瀏覽器會快取物件直到 |
原始伺服器將 |
CloudFront 和瀏覽器尊重標題。 |
CloudFront 快取 CloudFront 快取物件的最 CloudFront 小值TTL。請參閱此資料表下方的警告。 瀏覽器快取 瀏覽器遵守標頭。 |
警告
如果您的最小值大TTL於 0,即 CloudFront 使來源標頭中存在TTL、和/或private
指令 Cache-Control: no-cache
no-store
,也會使用快取策略的最小值。
如果原點可訪問,則從原點 CloudFront 獲取對象並將其返回給查看器。
如果原點無法訪問,並且最小值或最大TTL值大於 0,則 CloudFront 將提供從之前從原點獲得的對象。
為了避免這種行為,請將 Cache-Control:
stale-if-error=0
指示詞與從原始伺服器傳回的物件一同包含。如果來源無法訪問,這會導致 CloudFront 返回錯誤以響應 future 的請求,而不是返回之前從原點獲得的對象。
有關如何使用 CloudFront控制台更改發行版設置的信息,請參閱更新分佈。如需有關如何使用變更分佈設定的資訊 CloudFront API,請參閱UpdateDistribution。
使用 Amazon S3 主控台將標題新增至您的物件
使用 Amazon S3 主控台將 Cache-Control
或 Expires
標頭欄位新增至 Amazon S3 物件
登入 AWS Management Console 並開啟 Amazon S3 主控台,位於https://console.aws.amazon.com/s3/
。 -
在儲存貯體清單中,選擇包含要新增標頭之檔案的儲存貯體名稱。
-
選取要新增標頭的檔案或資料夾名稱旁的核取方塊。當您將標頭新增至資料夾時,它會影響該資料夾內的所有檔案。
-
選擇 Actions (動作),然後選擇 Edit metadata (編輯中繼資料)。
-
在 Add metadata (新增中繼資料) 面板中,執行下列動作:
-
選擇 Add metadata (新增中繼資料)。
-
對於 Type (類型),選擇 System defined (已定義系統)。
-
對於 Key (金鑰),選擇您要新增的標頭名稱 (Cache-Control (快取控制) 或 Expires (過期))。
-
對於 Value (值),輸入標頭值。例如,對於
Cache-Control
標題,您可以輸入max-age=86400
。對於Expires
,您可以輸入過期日期和時間,例如Wed, 30 Jun 2021 09:28:00 GMT
。
-
-
在頁面底部,請選擇 Edit metadata (編輯中繼資料)。