根據 Cookie 快取內容 - Amazon CloudFront

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

根據 Cookie 快取內容

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

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

例如,假設 locations.html 的請求包含具有 countryuk 值的 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 轉送,請更新分佈的快取行為。如需有關快取行為的詳細資訊,請參閱 快取行為設定,尤其是 轉送 Cookie允許清單 Cookie 小節。

您可以設定每個快取行為,執行下列其中一項動作:

  • 將所有 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

    如需有關針對每個快取行為轉送的 Cookie 名稱數量的目前配額,或是有關請求更高配額的詳細資訊,請參閱 查詢字串的配額 (舊版快取設定)

  • 不要轉送 Cookie 到您的原始伺服器 – CloudFront 不會根據檢視器傳送的 Cookie 快取您的物件。此外,CloudFront 會先移除 Cookie,再將請求轉送至原始伺服器,然後在回應傳回檢視者之前,移除回應中的 Set-Cookie 標頭。由於這不是使用原始伺服器資源的最佳方式,因此當您選取此快取行為時,您應該確保原始伺服器預設不會在原始伺服器回應中包含 Cookie。

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

存取日誌

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

區分大小寫

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

CloudFront 排序 Cookie

若 CloudFront 設為轉送 Cookie (所有或子集),則 CloudFront 在自然順序中藉由 Cookie 名稱排序 Cookie 然後再轉送請求到原始伺服器。

注意

不支援開頭為 $ 字元的 Cookie 名稱。CloudFront 會在轉送請求至原始伺服器之前移除 Cookie。您可以在 Cookie 名稱的開頭移除$字元或指定不同的字元。

If-Modified-SinceIf-None-Match

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

需要標準名稱值組格式

當值符合標準名稱值組格式時,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):快取標準中的回應快取控制指令

Cookie 名稱的長度上限

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

如果您設定 CloudFront 轉送所有 Cookie 到原始伺服器,則 Cookie 名稱的長度不重要。

如需有關使用 CloudFront 主控台來更新分佈,讓 CloudFront 能轉送 Cookie 到原始伺服器的詳細資訊,請參閱 更新分佈。如需使用 CloudFront API 更新分佈的詳細資訊,請參閱 Amazon CloudFront API 參考中的 UpdateDistribution