瞭解快取政策 - Amazon CloudFront

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

瞭解快取政策

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

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

政策資訊

名稱

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

描述

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

存活期 (TTL) 設定

存留時間(TTL)設置與Cache-ControlExpires HTTP 標頭(如果它們在源響應中)一起使用,以確定 CloudFront 緩存中的對象保持有效的時間長度。

最短 TTL

在檢查來源以 CloudFront 查看物件是否已更新之前,您希望物件保留在 CloudFront 快取記憶體中的最短時間 (以秒為單位)。如需詳細資訊,請參閱 管理內容在快取中停留的時間長度 (到期)

最長 TTL

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

預設 TTL

在檢查來源以 CloudFront 查看物件是否已更新之前,您希望物件保留在 CloudFront 快取記憶體中的預設時間 (秒)。 CloudFront 只有在原點傳送Cache-ControlExpires標頭隨物件一起傳送時,才會使用此設定值作為物件的 TTL。如需詳細資訊,請參閱 管理內容在快取中停留的時間長度 (到期)

注意

如果 [最小 TTL]、[最大 TTL] 和 [預設 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 定可在檢視器支援時,要求並快取以 Gzip 或 Brotli 壓縮格式壓縮的物件。這些設置還允許CloudFront 壓縮工作。檢視器透過 Accept-Encoding HTTP 標頭表示他們支援這些壓縮格式。

注意

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

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

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

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

  • 此快取原則所附加的快取行為是以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 包含標準化的 header (Accept-Encoding: br,gzip)。原始伺服器請求不包含檢視者傳送的 Accept-Encoding 標頭中的其他值。

如果檢視器支援一種壓縮格式,但不支援另一種壓縮格式 (例如,if gzip 是檢視器要求中Accept-Encoding標頭中的值,但 br is not — 則CloudFront 會執行下列動作:

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

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

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

若要瞭解 CloudFront 如果檢視器支援 Brotli 但不支援 Gzip,請在上述範例中彼此取代兩種壓縮格式。

如果檢視器不支援 Brotli 或 GZIP (也就是說,檢視器要求中的Accept-Encoding標頭不包含br或作為值):gzipCloudFront

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

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

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

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

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

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

  • 如果邊緣位置在快取中沒有符合要求且未過期的 Gzip 壓縮物件,請在對應的原始要求中加 CloudFront 入標準化 header (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 標頭。