本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
瞭解快取政策
您可以透過控制快取索引鍵中包含的值 (URL 查詢字串、HTTP 標頭和 Cookie),使用快取政策來改善快取命中率。 CloudFront針對一般使用案例,提供一些預先定義的快取原則 (稱為受管理策略)。您可以使用這些受管政策,也可以建立專屬於您需求的專屬快取政策。如需有關受管政策的詳細資訊,請參閱 使用受管理快取政策。
快取政策包含下列設定,這些設定分類為政策資訊、存留時間 (TTL) 設定,以及快取金鑰設定。
政策資訊
- 名稱
-
用來識別快取政策的唯一名稱。在主控台中,您可以使用名稱將快取政策附加到快取行為。
- 描述
-
用來描述快取政策的備註。這是選用的,但它可以協助您識別快取政策的目的。
存活期 (TTL) 設定
存留時間(TTL)設置與Cache-Control
和 Expires
HTTP 標頭(如果它們在源響應中)一起使用,以確定 CloudFront 緩存中的對象保持有效的時間長度。
- 最短 TTL
-
在檢查來源以 CloudFront 查看物件是否已更新之前,您希望物件保留在 CloudFront 快取記憶體中的最短時間 (以秒為單位)。如需詳細資訊,請參閱 管理內容在快取中停留的時間長度 (到期)。
- 最長 TTL
-
物件在檢查來源以 CloudFront 查看物件是否已更新之前停留在 CloudFront快取記憶體中的時間上限 (以秒為單位)。 CloudFront 只有在原點傳送物件
Cache-Control
或Expires
標頭時,才會使用此設定。如需詳細資訊,請參閱 管理內容在快取中停留的時間長度 (到期)。 - 預設 TTL
-
在檢查來源以 CloudFront 查看物件是否已更新之前,您希望物件保留在 CloudFront 快取記憶體中的預設時間 (秒)。 CloudFront 只有在原點未傳送
Cache-Control
或Expires
標頭隨物件一起傳送時,才會使用此設定值作為物件的 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 要求標頭。
-
-
檢視器要求中 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 壓縮物件 (請求包含帶有值
gzip
的Accept-Encoding
HTTP 標頭)。在這種情況下,請使用啟用 Gzip 的設置(true
在 CloudFront API AWS CLI, AWS SDK 中設置EnableAcceptEncodingGzip
為)。 AWS CloudFormation -
當查看者支援它們時,您的原始伺服器返回 Brotli 壓縮物件 (請求包含帶有值
br
的Accept-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 — 也就是說,如果
gzip
和br
值同時位於檢視器要求的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
或作為值):gzip
CloudFront-
不包含在快取金鑰中的
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 標頭。
-