了解快取政策 - Amazon CloudFront

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

了解快取政策

您可以使用快取政策藉由控制快取金鑰中包含的值 (URL 查詢字串、HTTP 標頭和 Cookie) 來改善快取命中率。CloudFront 會針對常見使用案例提供一些預先定義的快取政策 (稱為受管政策)。您可以使用這些受管政策,也可以建立專屬於您需求的專屬快取政策。如需有關受管政策的詳細資訊,請參閱 使用受管快取政策

快取政策包含下列設定,這些設定分類為政策資訊存留時間 (TTL) 設定,以及快取金鑰設定

政策資訊

名稱

用來識別快取政策的唯一名稱。在主控台中,您可以使用名稱將快取政策附加到快取行為。

描述

用來描述快取政策的備註。這是選用的,但它可以協助您識別快取政策的目的。

存活期 (TTL) 設定

存留時間 (TTL) 設定會與 Cache-ControlExpires HTTP 標頭 (如果它們在原始回應中) 一起運作,以判斷 CloudFront 快取中物件保持有效的時間長度。

最短 TTL

預設時間的長度下限 (以秒為單位),此時間是您希望在 CloudFront 檢查來源以查看物件是否已更新前,物件要停留在 CloudFront 快取中的時間。如需詳細資訊,請參閱 管理內容在快取中停留的時間 (過期)

最長 TTL

時間的長度上限 (以秒為單位),此時間是 CloudFront 檢查來源以查看物件是否已更新前,物件要停留在 CloudFront 快取中的時間。只有在來源與物件一起傳送 Cache-ControlExpires 標頭時,CloudFront 才會使用此設定。如需詳細資訊,請參閱 管理內容在快取中停留的時間 (過期)

預設 TTL

預設時間長度 (以秒為單位),此時間是您希望在 CloudFront 檢查來源以查看物件是否已更新前,物件要停留在 CloudFront 快取中的時間。只有在原始伺服器物件與物件一起傳送 Cache-ControlExpires 標頭時,CloudFront 才會使用此設定的值做為物件的 TTL。如需詳細資訊,請參閱管理內容在快取中停留的時間 (過期)

注意

如果 Minimum TTLMaximum TTLDefault TTL 設定都設為 0,則會停用 CloudFront 快取。

快取金鑰設定

快取金鑰設定會指定檢視器請求中 CloudFront 包含在快取金鑰中的值。這些值可以包括 URL 查詢字串、HTTP 標頭和 Cookie。您包含在快取金鑰中的值會自動包含在 CloudFront 傳送至原始伺服器的請求中,稱為原始伺服器請求。如需在不影響快取金鑰的情況下控制原始伺服器請求的相關資訊,請參閱 使用政策控制原始伺服器請求

快取金鑰設定包括:

標頭

在檢視器請求中,CloudFront 會包含在快取金鑰和原始伺服器請求中的 HTTP 標頭。針對標頭,您可以選擇下列設定之一:

  • - 檢視器請求中的 HTTP 標頭不會包含在快取金鑰中,也不會自動包含在原始伺服器請求中。

  • Include the following headers (包含以下標頭) - 您可以指定檢視器請求中的哪些 HTTP 標頭會包含在快取金鑰中,並自動包含在原始伺服器請求中。

當您使用 Include the following headers (包含以下標頭) 設定時,您可以指定 HTTP 標頭的名稱,而不是它們的值。例如,請參閱下列 HTTP 標頭:

Accept-Language: en-US,en;q=0.5

在這種情況下,您可以將標頭指定為 Accept-Language,而不是 Accept-Language: en-US,en;q=0.5。但是,在快取金鑰和原始伺服器請求中,CloudFront 會包含完整的標頭,包括其值。

您也可以在快取金鑰中,包含由 CloudFront 產生的某些標頭。如需詳細資訊,請參閱新增 CloudFront 請求標頭

Cookie

在檢視器請求中,CloudFront 會包含在快取金鑰和原始伺服器請求中的 Cookie。針對 Cookie,您可以選擇下列設定之一:。

  • - 檢視器請求中的 Cookie 不會包含在快取金鑰中,也不會自動包含在原始伺服器請求中。

  • 所有 - 檢視器請求中的所有 Cookie 都包含在快取金鑰中,並自動包含在原始伺服器請求中。

  • Include specified cookies (包含指定的 Cookie) - 您可以指定檢視器請求中的哪些 Cookie 會包含在快取金鑰中,並自動包含在原始伺服器請求中。

  • Include all cookies except (包含所有 Cookie,除了:) - 您可以指定檢視器請求中的哪些 Cookie 不會包含在快取金鑰中,且不會自動包含在原始伺服器請求中。所有其他 Cookie、您預期指定的 Cookie,都會包含在快取金鑰中,並自動包含在原始伺服器請求中。

當您使用 Include specified cookies (包含指定 Cookie) 或 Include all cookies except (包含所有 Cookie,除了:) 設定時,您可以依名稱指定 Cookie,而不是依值來指定 Cookie。例如,請參閱下列 Cookie 標頭:

Cookie: session_ID=abcd1234

在這種情況下,您可以將 Cookie 指定為 session_ID,而不是 session_ID=abcd1234。但是,CloudFront 會在快取金鑰和原始伺服器請求中包括完整的 Cookie,包括它的值。

查詢字串

在檢視器請求中,CloudFront 會包含在快取金鑰和原始伺服器請求中的 URL 查詢字串。對於查詢字串,您可以選擇下列其中一個設定:

  • – 檢視器請求中的查詢字串不會包含在快取金鑰中,也不會自動包含在原始伺服器的請求中。

  • 所有 – 檢視器請求中的所有查詢字串都會包含在快取金鑰中,並且也會自動包含在原始伺服器請求中。

  • Include specified query strings (包含指定的查詢字串) – 您可以指定檢視器請求中的哪些查詢字串會包含在快取金鑰中,並自動包含在原始伺服器請求中。

  • Include all query strings except (包含所有查詢字串,除了:) – 您可以指定檢視器請求中的哪些查詢字串不會包含在快取金鑰中,且不會自動包含在原始伺服器請求中。所有其他查詢字串 (您指定的查詢字串) 都會包含在快取金鑰中,並自動包含在原始伺服器請求中。

當您使用 Include specified query strings (包含指定的查詢字串) 或 Include all query strings except (包含所有查詢字串,除了:) 設定時,您可以依名稱來指定查詢字串,而不是依值來指定查詢字串。例如,請參閱下列 URL 路徑。

/content/stories/example-story.html?split-pages=false

在這種情況下,您可以將查詢字串指定為 split-pages,而不是 split-pages=false。不過,在快取金鑰和原始伺服器請求中,CloudFront 會包含完整的查詢字串 (包括其值)。

注意

對於快取金鑰設定,CloudFront 會將標頭、查詢字串和 Cookie 的星號字元 (*) 視為文字字串,而非萬用字元。

壓縮支援

當檢視器支援 CloudFront 時,這些設定可以請求和快取以 Gzip 或 Brotli 壓縮格式壓縮的物件。這些設定也允許 CloudFront 壓縮運作。檢視器透過 Accept-Encoding HTTP 標頭表示他們支援這些壓縮格式。

注意

只有在使用 HTTPS 發送請求時,Chrome 和 Firefox 網頁瀏覽器才支援 Brotli 壓縮。這些瀏覽器不支援使用 HTTP 請求的 Brotli。

當下列任一條件成立時,請啟用這些設定:

  • 當查看者支援它們時,您的原始伺服器返回 Gzip 壓縮物件 (請求包含帶有值 gzipAccept-Encoding HTTP 標頭)。在此情況下,請使用啟用 Gzip 的設定 (在 CloudFront API、 AWS SDKs或 trueEnableAcceptEncodingGzip設定為 AWS CloudFormation)。 AWS CLI

  • 當查看者支援它們時,您的原始伺服器返回 Brotli 壓縮物件 (請求包含帶有值 brAccept-Encoding HTTP 標頭)。在此情況下,請使用已啟用 Brotli 的設定 (在 CloudFront API、 AWS SDKs或 trueEnableAcceptEncodingBrotli設定為 AWS CloudFormation)。 AWS CLI

  • 此快取政策連接到的快取行為會設定 CloudFront 壓縮。在這種情況下,您可以啟用 Gzip 或 Brotli 的快取,或兩者的快取。啟用 CloudFront 壓縮時,啟用兩種格式的快取可協助降低資料傳輸到網際網路的成本。

注意

如果您針對其中一種或兩種壓縮格式啟用快取,請勿在與相同快取行為相關聯的原始伺服器請求政策中包含 Accept-Encoding 標頭。當針對這些格式啟用快取時,CloudFront 一律會在原始伺服器請求中包含此標頭,因此在原始伺服器請求政策中包含 Accept-Encoding 沒有任何作用。

如果您的原始伺服器未傳回 Gzip 或 Brotli 壓縮物件,或是快取行為未設定 CloudFront 壓縮,請勿啟用壓縮物件的快取功能。如果您這樣做,可能會導致快取命中率降低。

以下說明這些設定如何影響 CloudFront 分佈。下列所有案例假設檢視器請求會包含 Accept-Encoding 標頭。當檢視者請求不包含 Accept-Encoding 標頭時,CloudFront 不會在快取金鑰中包含此標頭,也不會將其包含在對應的原始伺服器請求中。

針對兩種壓縮格式啟用快取壓縮物件時

如果檢視器同時支援 Gzip 和 Brotli,亦即如果 gzipbr 值都在檢視器請求的 Accept-Encoding 標頭中,則 CloudFront 執行以下操作:

  • 將標頭標準化為 Accept-Encoding: br,gzip,並在快取金鑰中包含標準化標頭。快取金鑰不包含檢視者傳送的 Accept-Encoding 標頭中的其他值。

  • 如果節點位置在快取中有符合請求且未過期的 Brotli 或 Gzip 壓縮物件,則節點位置會將物件傳回給檢視器。

  • 如果邊緣節點在快取中沒有符合請求且未過期的 Brotli 或 Gzip 壓縮物件,則 CloudFront 會在對應的原始伺服器請求中包含標準化標頭 (Accept-Encoding: br,gzip)。原始伺服器請求不包含檢視者傳送的 Accept-Encoding 標頭中的其他值。

如果檢視器支援一種壓縮格式,但不支援另一種壓縮格式—例如,如果 gzip 是檢視器請求中 Accept-Encoding 標頭中的值,但 br 不是—CloudFront 會有以下操作:

  • 將標頭標準化為 Accept-Encoding: gzip,並在快取金鑰中包含標準化標頭。快取金鑰不包含檢視者傳送的 Accept-Encoding 標頭中的其他值。

  • 如果節點位置在快取中有符合請求且未過期的 Gzip 壓縮物件,則節點位置會將物件傳回給檢視器。

  • 如果邊緣節點在快取中沒有符合請求且未過期的 Gzip 壓縮物件,則 CloudFront 會在對應的原始伺服器請求中包含標準化標頭 (Accept-Encoding: gzip)。原始伺服器請求不包含檢視者傳送的 Accept-Encoding 標頭中的其他值。

若要瞭解如果檢視器支援 Brotli 但不支援 Gzip 時,CloudFront 會如何因應,請將前面例子中的兩種壓縮格式相互替換。

如果檢視器不支援 Brotli 或 Gzip—亦即檢視器請求中的 Accept-Encoding 標頭不包含 brgzip 作為值—則 CloudFront:

  • 不包含在快取金鑰中的 Accept-Encoding 標頭。

  • 包含 Accept-Encoding: identity 在相應的原始伺服器請求中。原始伺服器請求不包含檢視者傳送的 Accept-Encoding 標頭中的其他值。

針對某種壓縮格式啟用快取壓縮物件時,但不啟用另一種壓縮格式

如果檢視器支持啟用快取的格式—例如,如果為 Gzip 啟用了快取壓縮物件,並且檢視器支援 Gzip (gzip 是檢視器請求中 Accept-Encoding 標頭的值之一)—CloudFront 會執行以下操作:

  • 將標頭標準化為 Accept-Encoding: gzip,並在快取金鑰中包含標準化標頭。

  • 如果節點位置在快取中有符合請求且未過期的 Gzip 壓縮物件,則節點位置會將物件傳回給檢視器。

  • 如果邊緣節點在快取中沒有符合請求且未過期的 Gzip 壓縮物件,則 CloudFront 會在對應的原始伺服器請求中包含標準化標頭 (Accept-Encoding: gzip)。原始伺服器請求不包含檢視者傳送的 Accept-Encoding 標頭中的其他值。

當檢視器同時支援 Gzip 和 Brotli (檢視器請求中的 Accept-Encoding 標頭同時包含 gzip br 值) 時,這種行為是相同的,因為在這種情況下,不會啟用快取 Brotli 的壓縮物件。

若要瞭解 CloudFront 如果已針對 Brotli 啟用快取壓縮物件,但未啟用 Gzip,請在前面的範例中將兩種壓縮格式取代。

如果檢視器不支援啟用快取的壓縮格式 (檢視器請求中的 Accept-Encoding 標頭不包含該格式的值),則 CloudFront:

  • 不包含在快取金鑰中的 Accept-Encoding 標頭。

  • 包含 Accept-Encoding: identity 在相應的原始伺服器請求中。原始伺服器請求不包含檢視者傳送的 Accept-Encoding 標頭中的其他值。

針對兩種壓縮格式停用快取壓縮物件時

針對這兩種壓縮格式停用快取壓縮物件時,CloudFront 會將 Accept-Encoding 標頭視為檢視器請求中任何其他 HTTP 標頭相同。預設情況下,系統不會將其不會包含在快取金鑰中,也不包含在原始伺服器請求中。您可以將其包含在快取政策中的標頭清單或原始伺服器請求政策中,如同任何其他 HTTP 標頭。