根據餅乾緩存內容 - Amazon CloudFront

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

根據餅乾緩存內容

根據預設,在處理要求和回應時,或在邊緣位置快取物件時,不 CloudFront 會考慮 Cookie。如果 CloudFront 收到兩個除了Cookie標頭中的內容之外相同的請求,則默認情況下,將請求 CloudFront視為相同的請求,並為這兩個請求返回相同的對象。

您可以設定 CloudFront 為在檢視器要求中將部分或全部 Cookie 轉寄至您的來源,並根據物件轉寄的 Cookie 值快取物件的不同版本。當您執行這項操作時, CloudFront 會使用檢視器要求中的部分或全部 Cookie (設定為轉寄的任何 Cookie) 來唯一識別快取中的物件。

例如,假設 locations.html 的請求包含具有 countryuk 值的 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-SinceIf-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中的。