本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
根據餅乾緩存內容
根據預設,在處理要求和回應時,或在邊緣位置快取物件時,不 CloudFront 會考慮 Cookie。如果 CloudFront 收到兩個除了Cookie
標頭中的內容之外相同的請求,則默認情況下,將請求 CloudFront視為相同的請求,並為這兩個請求返回相同的對象。
您可以設定 CloudFront 為在檢視器要求中將部分或全部 Cookie 轉寄至您的來源,並根據物件轉寄的 Cookie 值快取物件的不同版本。當您執行這項操作時, CloudFront 會使用檢視器要求中的部分或全部 Cookie (設定為轉寄的任何 Cookie) 來唯一識別快取中的物件。
例如,假設 locations.html
的請求包含具有 country
或 uk
值的 fr
Cookie。當您根據 country
Cookie CloudFront 的值設定快取物件時,會將要求 CloudFront 轉送locations.html
至原始位置,並包含 country
Cookie 及其值。您的來源會傳回locations.html
,並針對 country
Cookie 值所在的要求 CloudFront 快取物件一次,uk
並針對值所在的要求快取一次fr
。
重要
Amazon S3 和某些HTTP服務器不處理餅乾。不要配置 CloudFront 為將 cookie 轉發到不處理 cookie 或不會根據 cookie 改變其響應的來源。這可能會導 CloudFront 致將更多請求轉發給同一個對象的來源,這會降低性能並增加原始對象的負載。如果考慮到上一個例子,您的來源不會處理 country
cookie,或者始終返回相同版本的locations.html
到,而不 CloudFront 管 country
cookie 的值為何,請不 CloudFront 要配置為轉發該 cookie。
相反地,如果您的自訂來源取決於特定 Cookie,或根據 Cookie 傳送不同的回應,請確定您設定為將該 Cookie 轉寄 CloudFront 至來源。否則,請先 CloudFront 移除 Cookie,然後再將請求轉寄至您的來源。
若要設定 Cookie 轉送,請更新分佈的快取行為。如需有關快取行為的詳細資訊,請參閱 快取行為設定,尤其是 轉送 Cookie 和 允許清單 Cookie 小節。
您可以設定每個快取行為,執行下列其中一項動作:
-
將所有 cookie 轉發到您的來源 — CloudFront 包括查看者在將請求轉發到來源時發送的所有 cookie。當您的來源傳回回應時,會使用檢視器要求中的 Cookie 名稱和值來 CloudFront 快取回應。如果原始響應包含
Set-Cookie
標題,則將其與請求對象一起 CloudFront 返回給查看器。 CloudFront 還可以使用從來源返回的對象緩存Set-Cookie
標頭,並將這些Set-Cookie
標頭發送給所有緩存命中的查看器。 -
轉寄您指定的一組 Cookie — CloudFront 移除檢視者傳送的任何不在允許清單上的 Cookie,然後再將要求轉寄至原始位置。 CloudFront 使用檢視器要求中列出的 Cookie 名稱和值來快取回應。如果原始響應包含
Set-Cookie
標題,則將其與請求對象一起 CloudFront 返回給查看器。 CloudFront 還可以使用從來源返回的對象緩存Set-Cookie
標頭,並將這些Set-Cookie
標頭發送給所有緩存命中的查看器。如需有關在 Cookie 名稱中指定萬用字元的詳細資訊,請參閱 允許清單 Cookie。
如需有關針對每個快取行為轉送的 Cookie 名稱數量的目前配額,或是有關請求更高配額的詳細資訊,請參閱 查詢字串的配額 (舊版快取設定)。
-
不要將 cookie 轉發到您的來源- CloudFront 不會根據查看器發送的 cookie 緩存您的對象。此外,在將請求轉寄到來源之前,請先移 CloudFront 除 Cookie,並在將回覆傳回應給檢視者之前移除回應中的
Set-Cookie
標頭。由於這不是使用來源資源的最佳方式,因此當您選取此快取行為時,應確保您的來源預設不會在原始回應中包含 Cookie。
請注意以下有關指定您要轉送的 Cookie:
- 存取日誌
-
如果您配置 CloudFront 為記錄請求並記錄 cookie,則會 CloudFront 記錄所有 Cookie 和所有 Cookie 屬性,即使您配置為 CloudFront 不將 Cookie 轉發到您的來源,或者您配置 CloudFront 為僅轉發特定 cookie。如需有關 CloudFront 記錄的詳細資訊,請參閱配置和使用標準日誌(訪問日誌)。
- 區分大小寫
-
Cookie 名稱和值都是區分大小寫。例如,如果設定 CloudFront 為轉寄所有 Cookie,而同一物件的兩個檢視器要求具有相同的 Cookie (大小寫除外),則會 CloudFront 快取物件兩次。
- CloudFront 排序餅乾
-
如果配置 CloudFront 為轉發 cookie(全部或子集),請在將請求轉發到您的來源之前按 Cookie 名稱自然順 CloudFront 序對 Cookie 進行排序。
注意
以
$
字元開頭的 Cookie 名稱不受支援。 CloudFront 將在將請求轉發到來源之前刪除 cookie。您可以刪除$
字符或在 cookie 名稱的開頭指定不同的字符。 If-Modified-Since
和If-None-Match
-
If-Modified-Since
當設定為轉寄 Cookie (全部或子集) 時 CloudFront ,則不支援If-None-Match
條件式要求。 - 需要標準名稱值組格式
-
CloudFront 只有在值符合標準名稱 — 值配對格式時,才會轉寄 Cookie 標
頭,例如: "Cookie: cookie1=value1; cookie2=value2"
- 停用
Set-Cookie
標頭的快取功能 -
如果配置 CloudFront 為將 cookie 轉發到來源(無論是全部還是特定 cookie),它還會緩存在源響應中收到的
Set-Cookie
標頭。 CloudFront 在對原始檢視器的回應中包含這些Set-Cookie
標頭,並且還將它們包含在從 CloudFront 快取提供的後續回應中。如果您想在來源接收 cookie,但不想緩存 CloudFront 來源響應中的
Set-Cookie
標題,請配置您的來源以添加帶有指定Set-Cookie
為字段名稱的指no-cache
令的Cache-Control
標題。例如:Cache-Control: no-cache="Set-Cookie"
。如需詳細資訊,請參閱 < 超文字傳輸通訊協定 (HTTP/1.1):快取標準中的回應快取控制指示>。 - Cookie 名稱的長度上限
-
如果您設定為 CloudFront 將特定 Cookie 轉寄至您的來源,則您設定 CloudFront 要轉寄的所有 Cookie 名稱中的位元組總數不得超過 512 減去您要轉寄的 Cookie 數目。例如,如果您設定 CloudFront 將 10 個 Cookie 轉寄至您的來源,則 10 個 Cookie 名稱的總長度不能超過 502 個位元組 (512 — 10)。
如果您配置 CloudFront 為將所有 cookie 轉發到您的來源,則 cookie 名稱的長度無關緊要。
有關使用 CloudFront 控制台更新發行版以便將 cookie CloudFront 轉發到來源的信息,請參閱更新分佈。如需使用更新分發的 CloudFront API相關資訊,請參閱 Amazon 參 CloudFront API考UpdateDistribution中的。