本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
根據 Cookie 快取內容
根據預設,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 轉送,請更新分佈的快取行為。如需有關快取行為的詳細資訊,請參閱 快取行為設定,尤其是 轉送 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-Since
和If-None-Match
-
若 CloudFront 設為轉送 Cookie (所有或子集),則不支援
If-Modified-Since
和If-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。