

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

# 根據 Cookie 快取內容
<a name="Cookies"></a>

根據預設，CloudFront 在處理請求和回應時，以及在節點中快取物件時，不會考慮 Cookie。如果 CloudFront 接收到除了 `Cookie` 標頭中的內容外的兩個相同請求，則根據預設，CloudFront 會將請求視為相同，並為兩個請求傳回相同物件。

您可以設定 CloudFront 將檢視者請求中的部分或所有 Cookie 轉送到原始伺服器，並根據轉送的中的 Cookie 值，快取個別物件版本。執行這項操作時，CloudFront 會在檢視者請求中使用部分或全部 Cookie (無論設定了哪個轉送)，以唯一識別快取中的物件。

例如，假設 `locations.html` 的請求包含具有 `country` 或 `uk` 值的 `fr` Cookie。當您設定 CloudFront 根據 `country` Cookie 值快取物件時，CloudFront 會將 `locations.html` 的請求轉送至原始伺服器，並包含 `country` Cookie 和其值。原始伺服器傳回 `locations.html`，CloudFront 會為 `country` Cookie 為 `uk` 的請求快取其物件一次，以及為該值為 `fr` 的請求快取其物件一次。

**重要**  
Amazon S3 和一些 HTTP 伺服器不處理 Cookie。不要設定 CloudFront，將 Cookie 轉送到不處理 Cookie 或不根據 Cookie 改變其回應的原始伺服器。這會導致 CloudFront 轉送更多的請求到相同物件的原始伺服器，這會降低效能且增加原始伺服器的負載。如果考慮到前面的範例，原始伺服器不處理 `country` Cookie 或始終將相同版本的 `locations.html` 傳回 CloudFront，無論 `country` Cookie 的值如何，請不要設定 CloudFront 來轉送該 Cookie。  
反之，如果自定義原始伺服器取決於特定 cookie，或根據 Cookie 傳送不同回應，請務必設定 CloudFront，將該 cookie 轉送到原始伺服器。否則，CloudFront 會在轉送請求至您的原始伺服器之前就移除該 Cookie。

若要設定 Cookie 轉送，請更新分佈的快取行為。如需有關快取行為的詳細資訊，請參閱 [快取行為設定](DownloadDistValuesCacheBehavior.md)，尤其是 [轉送 Cookie](DownloadDistValuesCacheBehavior.md#DownloadDistValuesForwardCookies) 和 [允許清單 Cookie](DownloadDistValuesCacheBehavior.md#DownloadDistValuesAllowlistCookies) 小節。

您可以設定每個快取行為，執行下列其中一項動作：
+ **將所有 Cookie 轉送到原始伺服器** - CloudFront 包括瀏覽器將請求轉送到原始伺服器時，檢視者發送的所有 Cookie。當原始伺服器傳回回應時，CloudFront 會使用檢視者請求中的 Cookie 名稱和值來快取回應。如果原始回應包含 `Set-Cookie` 標頭，CloudFront 會將它們傳回給具有請求物件的檢視者。CloudFront 也會使用從原始伺服器傳回的物件快取 `Set-Cookie` 標頭，並在所有快取點擊時將這些 `Set-Cookie` 標頭傳送至所有快取命中的檢視者。
+ **轉送您指定的一組 Cookie - ** CloudFront 會先移除檢視者傳送的任何不在允許清單上的 Cookie，然後再將請求轉寄給原始伺服器。CloudFront 會使用檢視者請求中列入清單的 Cookie 名稱和值來快取回應。如果原始回應包含 `Set-Cookie` 標頭，CloudFront 會將它們傳回給具有請求物件的檢視者。CloudFront 也會使用從原始伺服器傳回的物件快取 `Set-Cookie` 標頭，並在所有快取點擊時將這些 `Set-Cookie` 標頭傳送至所有快取命中的檢視者。

  如需有關在 Cookie 名稱中指定萬用字元的詳細資訊，請參閱 [允許清單 Cookie](DownloadDistValuesCacheBehavior.md#DownloadDistValuesAllowlistCookies)。

  如需有關針對每個快取行為轉送的 Cookie 名稱數量的目前配額，或是有關請求更高配額的詳細資訊，請參閱 [查詢字串的配額 (舊版快取設定)](cloudfront-limits.md#limits-allowlisted-query-strings)。
+ **不轉送 Cookie 至原始伺服器 - **CloudFront 不會根據檢視器傳送的 Cookie 來快取物件。此外，CloudFront 會先移除 Cookie，再將請求轉送至原始伺服器，然後在回應傳回檢視者之前，移除回應中的 `Set-Cookie` 標頭。由於這不是使用原始伺服器資源的最佳方式，因此當您選取此快取行為時，您應該確保原始伺服器預設不會在原始伺服器回應中包含 Cookie。

請注意以下有關指定您要轉送的 Cookie：

**存取日誌**  
如果您設定 CloudFront 以記錄請求及記錄 Cookie，CloudFront 將記錄所有 Cookie 和所有 Cookie 屬性，即使您設定 CloudFront 不轉送 Cookie 至原始伺服器，或設定 CloudFront 僅轉送指定 Cookie。如需 CloudFront Front 記錄的詳細資訊，請參閱[存取日誌 （標準日誌）](AccessLogs.md)。

**區分大小寫**  
Cookie 名稱和值都是區分大小寫。例如，如果 CloudFront 設為轉送所有 Cookie，且同一個物件的兩個瀏覽者請求具有相同的 Cookie，則 CloudFront 會快取物件兩次。

**CloudFront 排序 Cookie**  
若 CloudFront 設為轉送 Cookie (所有或子集)，則 CloudFront 在自然順序中藉由 Cookie 名稱排序 Cookie 然後再轉送請求到原始伺服器。  
 系統不支援以 `$` 字元開頭的 Cookie 名稱。否則，CloudFront 在轉送請求至您的原始伺服器之前就會移除該 Cookie。您可以在 Cookie 名稱的開頭移除 `$` 字元或指定不同的字元。

**`If-Modified-Since` 和 `If-None-Match`**  
若 CloudFront 設為轉送 Cookie (所有或子集)，則不支援 `If-Modified-Since` 和 `If-None-Match` 條件請求。

**需要標準名稱值組格式**  
當值符合[標準名稱值組格式](https://tools.ietf.org/html/rfc6265#section-4.1.1)時，CloudFront 才會轉送 Cookie 標頭，例如：`"Cookie: cookie1=value1; cookie2=value2"`

**停用 `Set-Cookie` 標頭的快取功能**  
如果設定 CloudFront 為將 Cookie 轉送至原始伺服器 (全部或特定 Cookies)，它也會快取在原始伺服器回應接收到的 `Set-Cookie` 標頭。CloudFront 對原始瀏覽者的回應中包含這些 `Set-Cookie` 標頭，且亦包含於 CloudFront 快取提供的後續回應中。  
如果您想在原始伺服器接收 cookie，但不希望 CloudFront 快取原始伺服器回應中的 `Set-Cookie` 標頭，請設定原始伺服器以新增 `Cache-Control` 標頭，該標頭具有指定 `no-cache` 為欄位名稱的 `Set-Cookie` 指令。例如：`Cache-Control: no-cache="Set-Cookie"`。如需詳細資訊，請參閱 *Hypertext Transfer Protocol (HTTP/1.1)：快取*標準中的[回應快取控制指令](https://tools.ietf.org/html/rfc7234#section-5.2.2)。

**Cookie 名稱的長度上限**  
若您設定 CloudFront 轉送指定 Cookie 到原始伺服器，在設定 CloudFront 轉送的所有 Cookie 名稱中所有位元組總數不能超過 512 減去您正轉送的 Cookie 數量。例如，如果設定 CloudFront 轉送 10 個 Cookie 到原始伺服器，則 10 個 Cookie 名稱的總和長度不能超過 502 位元 (512 – 10)。  
如果您設定 CloudFront 轉送所有 Cookie 到原始伺服器，則 Cookie 名稱的長度不重要。

如需有關使用 CloudFront 主控台來更新分佈，讓 CloudFront 能轉送 Cookie 到原始伺服器的詳細資訊，請參閱 [更新分佈](HowToUpdateDistribution.md)。如需使用 CloudFront API 更新分佈的詳細資訊，請參閱 *Amazon CloudFront API 參考*中的 [UpdateDistribution](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_UpdateDistribution.html)。