為自訂原始伺服器之請求和回應行為 - Amazon CloudFront

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

為自訂原始伺服器之請求和回應行為

如何 CloudFront 處理和轉發請求到您的自訂來源

本主題包含如何 CloudFront 處理檢視者要求,以及如何將請求轉寄至您的自訂來源的資訊。

身分驗證

對於DELETEGET、、HEADPATCH、和PUT請求POST,如果您設定 CloudFront將Authorization標頭轉寄至原始伺服器,則可以將原始伺服器設定為要求用戶端驗證。

對於OPTIONS請求,您可以將原始伺服器設定為僅在使用下列 CloudFront 設定時要求用戶端驗證:

您可以設定 CloudFront 使用 HTTP 或 HTTPS 將要求轉寄至來源;如需詳細資訊,請參閱搭配使用 HTTPS CloudFront

快取持續時間和最短 TTL

要控制對象在將另一個請求 CloudFront 轉發到您的來源之前保留在 CloudFront 緩存中的時間,您可以:

  • 設定原始伺服器在每個物件中新增 Cache-ControlExpires 標頭欄位。

  • 指定 CloudFront 快取行為中的最小 TTL 值。

  • 使用預設值為 24 小時。

如需詳細資訊,請參閱 管理內容保持在快取中達多久時間 (過期)

用戶端 IP 地址

如果檢視器將要求傳送至 CloudFront 但不包含X-Forwarded-For要求標頭,請從 TCP 連線 CloudFront 取得檢視器的 IP 位址、新增包含 IP 位址的X-Forwarded-For標頭,並將要求轉寄至原始位址。例如,如果192.0.2.2從 TCP 連接 CloudFront 獲取 IP 地址,它會將以下標頭轉發到原點:

X-Forwarded-For: 192.0.2.2

如果檢視器將要求傳送至 CloudFront 並包含X-Forwarded-For要求標頭,則會從 TCP 連線 CloudFront 取得檢視器的 IP 位址,將其附加至X-Forwarded-For標頭的結尾,並將要求轉送至原始位置。例如,如果檢視器要求包含X-Forwarded-For: 192.0.2.4,192.0.2.3192.0.2.2從 TCP 連線 CloudFront 取得 IP 位址,則會將下列標頭轉送至原點:

X-Forwarded-For: 192.0.2.4,192.0.2.3,192.0.2.2

某些應用程式 (例如負載平衡器 (包括 Elastic Load Balancing)、Web 應用程式防火牆、反向 Proxy、入侵預防系統和 API Gateway,會將轉寄要求的 CloudFront 邊緣伺服器 IP 位址附加到標頭的X-Forwarded-For結尾。例如,如果X-Forwarded-For: 192.0.2.2在轉寄至 ELB 的要求中 CloudFront 包含,且 CloudFront 邊緣伺服器的 IP 位址是 192.0.2.199,則 EC2 執行個體收到的請求會包含下列標頭:

X-Forwarded-For: 192.0.2.2,192.0.2.199

注意

X-Forwarded-For 標頭包含 IPv4 地址 (如 192.0.2.44) 和 IPv6 地址 (如 2001:0db8:85a3::8a2e:0370:7334)。

另請注意,當前服務器(CloudFront)路徑上的每個節點都可以修改X-Forwarded-For頭文件。如需詳細資訊,請參閱 RFC 7239‭ 的第 8.1 節。您也可以使用 CloudFront 邊緣計算函數修改標頭。

用戶端 SSL 身分驗證

CloudFront 不支援使用用戶端 SSL 憑證進行用戶端驗證。如果來源要求用戶端憑證,請 CloudFront 捨棄要求。

壓縮

如需詳細資訊,請參閱 提供壓縮檔案

條件式請求

當 CloudFront 收到已從 Edge 快取到期之物件的要求時,會將要求轉送至原始位置,以取得物件的最新版本,或從來源取得 CloudFront 邊緣快取已經具有最新版本的確認。通常,當 origin 最後一次將對象發送到時 CloudFront,它在響應中包含一個ETagLastModified值,一個值或兩個值。在 CloudFront 轉寄至來源的新要求中,新 CloudFront 增下列其中一項或兩項:

  • 含有已過期版本物件 If-Match 值的 If-None-MatchETag 標頭。

  • 含有已過期版本物件 If-Modified-Since 值的 LastModified 標頭。

來源會使用此資訊來判斷物件是否已更新,因此要將整個物件傳回至 CloudFront 或只傳回 HTTP 304 狀態碼 (未修改)。

Cookie

您可以設定 CloudFront 將 Cookie 轉寄至您的來源。如需詳細資訊,請參閱 根據 Cookie 快取內容

跨來源資源共享 (CORS)

如果您想 CloudFront 要遵守跨來源資源共用設定,請設定 CloudFront 將Origin標頭轉寄至您的來源。如需詳細資訊,請參閱 根據請求標頭快取內容

加密

您可以要求檢視者使用 HTTPS 將請求傳送至您的自訂原始伺服器, CloudFront 並 CloudFront 要求使用檢視者使用的通訊協定將要求轉寄至您的自訂原始伺服器。如需詳細資訊,請參閱下列分佈設定:

CloudFront 使用 SSLv3、TLSv1.0、TLSv1.1 和 TLSv1.2 通訊協定,將 HTTPS 要求轉寄至原始伺服器。對自訂原始伺服器,您可以選擇您希望 CloudFront 在與原始伺服器通訊時要使用的 SSL 通訊協定:

  • 如果您使用的是 CloudFront 主控台,請使用「Origin SSL 通訊協定」核取方塊來選擇通訊協定。如需詳細資訊,請參閱 建立分佈

  • 如果您使用的是 CloudFront API,請使用OriginSslProtocols元素指定通訊協定。如需詳細資訊 OriginSslProtocols,請參閱 Amazon CloudFront API 參考DistributionConfig中的和。

如果來源是 Amazon S3 存儲桶,請 CloudFront 始終使用 TLSv1.2。

重要

其他 SSL 和 TLS 的版本不支援。

如需搭配使用 HTTPS 的詳細資訊 CloudFront,請參閱搭配使用 HTTPS CloudFront。如需在檢視者之間以及您的來源之間以及 CloudFront您的來源之間 CloudFront 支援 HTTPS 通訊的密碼清單,請參閱。 CloudFront 檢視器與之間支援的通訊協定和密碼 CloudFront

包括內文的 GET 請求

如果檢視器GET要求包含主體,則會將 HTTP 狀態碼 403 (禁止) CloudFront 傳回給檢視器。

HTTP 方法

如果您設定 CloudFront 為處理其支援的所有 HTTP 方法,請 CloudFront接受來自檢視者的下列要求,並將它們轉寄至您的自訂來源:

  • DELETE

  • GET

  • HEAD

  • OPTIONS

  • PATCH

  • POST

  • PUT

CloudFront 始終緩存響應GETHEAD請求。您也可以設定 CloudFront 為快取要OPTIONS求的回應。 CloudFront 不會快取回應至使用其他方法的要求。

如需有關設定您的自訂原始伺服器是否處理這些方法的詳細資訊,請參閱您的原始伺服器的文件。

重要

如果您設定 CloudFront 為接受並轉送至原始伺服器,請將原始伺服器設定為處理所有方法。 CloudFront 例如,如果您因為想要使用而設定 CloudFront 為接受和轉寄這些方法POST,則必須將原始伺服器設定為適當處理要DELETE求,以便檢視者無法刪除您不希望使用的資源。如需詳細資訊,請參閱您的 HTTP 伺服器文件。

HTTP 請求標頭和 CloudFront 行為 (自訂和 Amazon S3 來源)

下表列出可以轉送到自訂和 Amazon S3 原始伺服器的 HTTP 請求標頭 (已指明例外狀況)。對於每個標頭,該表包含下列資訊:

  • CloudFront 如果您沒有配置 CloudFront 將標題轉發到您的來源,這會導 CloudFront 致根據標題值緩存對象的行為。

  • 您是否可以配置 CloudFront 為基於該頭的標題值緩存對象。

    您可以設定 CloudFront 為根據DateUser-Agent標頭中的值快取物件,但我們不建議這麼做。這些標頭具有許多可能的值,並且基於其值的緩存將導致 CloudFront 向您的來源轉發更多請求。

如需有關根據標頭值快取的詳細資訊,請參閱根據請求標頭快取內容

標頭 如果您沒有配置 CloudFront 為基於標題值緩存的行為 支援根據標頭值進行快取

其他定義的標頭

舊版快取設定 — CloudFront 將標頭轉寄至您的來源。

Accept

CloudFront 刪除標題。

Accept-Charset

CloudFront 刪除標題。

Accept-Encoding

如果該值包含gzipbr,則將標準化Accept-Encoding標題 CloudFront 轉發到您的原點。

如需詳細資訊,請參閱 壓縮支援提供壓縮檔案

Accept-Language

CloudFront 刪除標題。

Authorization

  • GET和 request — 在將HEAD請求轉發到您的來源之前 CloudFront 刪除Authorization標頭字段。

  • OPTIONSrequest — 如果您配置為緩存請求的響應,則在將OPTIONS請求轉發 CloudFront 到來源之前 CloudFront刪除Authorization標頭字段。

    CloudFront 如果您沒有配置緩存到 OPTIONS 請求的響應,則CloudFront 將Authorization頭字段轉發到您的來源。

  • DELETEPATCHPOST、和 request — 在將PUT請求轉寄至您的來源之前, CloudFront 不會移除標頭欄位。

Cache-Control

CloudFront 將標題轉發到您的來源。

CloudFront-Forwarded-Proto

CloudFront 在將請求轉寄至您的來源之前,不會新增標頭。

如需詳細資訊,請參閱「根據請求的通訊協定設定快取」。

CloudFront-Is-Desktop-Viewer

CloudFront 在將請求轉寄至您的來源之前,不會新增標頭。

如需詳細資訊,請參閱「根據裝置類型設定快取」。

CloudFront-Is-Mobile-Viewer

CloudFront 在將請求轉寄至您的來源之前,不會新增標頭。

如需詳細資訊,請參閱「根據裝置類型設定快取」。

CloudFront-Is-Tablet-Viewer

CloudFront 在將請求轉寄至您的來源之前,不會新增標頭。

如需詳細資訊,請參閱「根據裝置類型設定快取」。

CloudFront-Viewer-Country

CloudFront 在將請求轉寄至您的來源之前,不會新增標頭。

Connection

CloudFront 在將請求轉發到您的來源Connection: Keep-Alive之前替換此標頭。

Content-Length

CloudFront 將標題轉發到您的來源。

Content-MD5

CloudFront 將標題轉發到您的來源。

Content-Type

CloudFront 將標題轉發到您的來源。

Cookie

如果您配置 CloudFront 轉發 cookie,它會將Cookie標題字段轉發到您的來源。如果你不這樣做, CloudFront 刪除標Cookie題字段。如需詳細資訊,請參閱「根據 Cookie 快取內容」。

Date

CloudFront 將標題轉發到您的來源。

可以,但不建議

Expect

CloudFront 刪除標題。

From

CloudFront 將標題轉發到您的來源。

Host

CloudFront 將該值設置為與請求對象相關聯的來源的域名。

您無法根據 Amazon S3 或 MediaStore來源的主機標頭進行快取。

是 (自訂)

否 (S3 和 MediaStore)

If-Match

CloudFront 將標題轉發到您的來源。

If-Modified-Since

CloudFront 將標題轉發到您的來源。

If-None-Match

CloudFront 將標題轉發到您的來源。

If-Range

CloudFront 將標題轉發到您的來源。

If-Unmodified-Since

CloudFront 將標題轉發到您的來源。

Max-Forwards

CloudFront 將標題轉發到您的來源。

Origin

CloudFront 將標題轉發到您的來源。

Pragma

CloudFront 將標題轉發到您的來源。

Proxy-Authenticate

CloudFront 刪除標題。

Proxy-Authorization

CloudFront 刪除標題。

Proxy-Connection

CloudFront 刪除標題。

Range

CloudFront 將標題轉發到您的來源。如需詳細資訊,請參閱 如何 CloudFront 處理對象的部分請求(範圍 GET)

是,根據預設。

Referer

CloudFront 刪除標題。

Request-Range

CloudFront 將標題轉發到您的來源。

TE

CloudFront 刪除標題。

Trailer

CloudFront 刪除標題。

Transfer-Encoding

CloudFront 將標題轉發到您的來源。

Upgrade

CloudFront 刪除標題,除非你已經建立了一個WebSocket 連接。

否 (除了 WebSocket 連線)

User-Agent

CloudFront 替換此標題字段的值Amazon CloudFront。如果您 CloudFront 要根據使用者使用的裝置快取內容,請參閱根據裝置類型設定快取

可以,但不建議

Via

CloudFront 將標題轉發到您的來源。

Warning

CloudFront 將標題轉發到您的來源。

X-Amz-Cf-Id

CloudFront 在將請求轉發到您的來源之前,將標頭添加到查看者請求中。此標頭值包含可唯一識別請求的加密字串。

X-Edge-*

CloudFront 刪除所有X-Edge-*標題。

X-Forwarded-For

CloudFront 將標題轉發到您的來源。如需詳細資訊,請參閱「用戶端 IP 地址」。

X-Forwarded-Proto

CloudFront 刪除標題。

X-HTTP-Method-Override

CloudFront 刪除標題。

X-Real-IP

CloudFront 刪除標題。

HTTP 版本

CloudFront 使用 HTTP/1.1 將請求轉發到您的自定義來源。

最大請求長度和最大 URL 長度

最大請求長度,包括路徑、查詢字串 (如果有) 和標頭是 20,480 位元組。

CloudFront 從請求構造一個 URL。此 URL 的最大長度為 8192 位元組。

如果要求或 URL 超過這些上限,則會 CloudFront 傳回 HTTP 狀態碼 413「要求實體太大」給檢視器,然後終止與檢視器的 TCP 連線。

OCSP 裝訂

當檢視者提交物件的 HTTPS 要求時, CloudFront 或檢視者必須向憑證授權單位 (CA) 確認該網域的 SSL 憑證尚未撤銷。OCSP 裝訂透過允許驗證憑證並快取 CloudFront 來自 CA 的回應來加速憑證驗證,因此用戶端不需要直接向 CA 驗證憑證。

當收到相同網域中物件的大量 HTTPS 要求時,OCSP 裝訂的效能改善 CloudFront 會更明顯。每個在 CloudFront 節點的伺服器必須提交單獨的驗證請求。當 CloudFront 收到相同網域的大量 HTTPS 要求時,邊緣位置中的每部伺服器很快就會有來自 CA 的回應,它可以在 SSL 交握中「裝訂」封包;檢視者滿意憑證有效時,就 CloudFront 可以提供要求的物件。如果您的分佈無法取得在 CloudFront 節點更多的流量,新的請求更有可能被導向至尚未使用 CA 驗證憑證的伺服器。在這種情況下,檢視器會分別執行驗證步驟,而 CloudFront 伺服器會為物件提供服務。該 CloudFront 伺服器也會向 CA 提交驗證要求,因此當下次收到包含相同網域名稱的要求時,就會有來自 CA 的驗證回應。

持久性連線

當從您的來源 CloudFront 獲取響應時,它會嘗試保持連接幾秒鐘,以防另一個請求在該期間到達。維護持久性連線可節省重新建立 TCP 連線所需的時間,並為後續請求執行另一個 TLS 交握。

如需包括如何設定持續連線時間的詳細資訊,請參閱保持連線逾時 (僅限自訂原始伺服器)一節的您在建立或更新分佈時指定的值

通訊協定

CloudFront 根據下列項目,將 HTTP 或 HTTPS 要求轉寄至原始伺服器:

  • 檢視器傳送至 CloudFront的要求通訊協定 (HTTP 或 HTTPS)。

  • CloudFront主控台中「原始通訊協定原則」欄位的值,如果您使用的是 CloudFront API,則為DistributionConfig複雜類型中的OriginProtocolPolicy元素。在 CloudFront 主控台中,選項包括「僅限 HTTP」、「僅限 HTTPS」和「比對檢視器」。

如果指定 HTTP Only (僅限 HTTP)HTTPS Only (僅限 HTTPS),則無論檢視器請求中的通訊協定為何, CloudFront 都會使用指定的通訊協定,來將請求轉送到原始伺服器。

如果您指定「比對檢視器」,請使用檢視器要求中的通訊協定將要求 CloudFront 轉寄至原始伺服器。請注意,即使檢視者同時使用 HTTP 和 HTTPS 通訊協定發出要求,也只會 CloudFront 快取物件一次。

重要

如果使用 HTTPS 通訊協定將要求 CloudFront 轉寄至原始伺服器,而且原始伺服器傳回無效的憑證或自我簽署憑證,則會中 CloudFront 斷 TCP 連線。

如需如何使用 CloudFront 主控台更新發行版的詳細資訊,請參閱更新分佈。如需有關如何使用 CloudFront API 更新分發的詳細資訊,請參閱 Amazon CloudFront API 參考UpdateDistribution中的。

查詢字串

您可以配置是否將查詢字符串參數 CloudFront 轉發到您的來源。如需詳細資訊,請參閱 根據查詢字串參數快取內容

原始伺服器連線逾時和嘗試次數

Origin 連線逾時是嘗試建立與原點的連線時 CloudFront 等待的秒數。

原始連線嘗試次數是 CloudFront 嘗試連線至原點的次數。

這些設定共同決定在容錯移轉至次要原點 (在原始群組的情況下) 或傳回錯誤回應給檢視器之前, CloudFront 嘗試連線到原點的時間長度。根據預設, CloudFront 在嘗試連線至次要原點或傳回錯誤回應之前,會等待 30 秒 (每次嘗試 10 秒)。您可以指定較短的連線逾時、較少的嘗試次數或兩者,以縮短此時間。

如需詳細資訊,請參閱 控制原始伺服器逾時和嘗試次數

原始伺服器回應逾時

「原始伺服器回應逾時」,也稱為「原始伺服器讀取逾時」或「原始伺服器請求逾時」,適用於以下兩個數值:

  • 將要求轉送至來源之後 CloudFront 等待回應的時間量 (以秒為單位)。

  • 接收來自來源的回應封包 CloudFront 之後,以及在接收下一個封包之前等待的時間 (秒)。

CloudFront 行為取決於查看器請求的 HTTP 方法:

  • GETHEAD請求-如果來源沒有響應或在響應超時期間內停止響應,則中 CloudFront 斷連接。如果指定的來源連線嘗試次數超過 1 次,請再次 CloudFront 嘗試取得完整的回應。 CloudFront 嘗試最多 3 次,由原始連線嘗試設定的值決定。如果來源在最後一次嘗試期間 CloudFront 沒有回應,在收到另一個相同來源的內容要求之前,不要再試一次。

  • DELETEOPTIONSPATCHPUT、和POST請求 — 如果來源在 30 秒內沒有回應,請中 CloudFront 斷連線,而不會再次嘗試聯絡來源。用戶端可以視需要重新提交請求。

如需詳細資訊,包括如何設定原始伺服器回應逾時,請參閱回應逾時 (僅限自訂原始伺服器)

相同物件之同步請求 (請求折疊)

當 CloudFront 節點位置收到對象的請求,並且該對象不在緩存中或緩存的對象已過期時,請 CloudFront 立即將請求發送到原點。但是,如果同一物件有同時要求 (也就是說,如果相同物件 (具有相同快取金鑰) 的其他要求在 CloudFront 收到第一個要求的回應之前抵達邊緣位置,則會在將額外要求轉送至原始位置之前CloudFront 暫停。這個短暫的暫停有助於減少原點的負載。 CloudFront 將原始請求的響應發送到暫停時收到的所有請求。這就是所謂的請求摺疊。在 CloudFront 記錄檔中,第一個要求會在x-edge-result-type欄位Miss中識別為,而收合的要求會識別為Hit. 如需有關 CloudFront 記錄檔的詳細資訊,請參閱CloudFront 和邊緣功能記錄

CloudFront 只會收合共用快取金鑰的要求。如果其他要求不共用相同的快取金鑰,例如,您設定為根據要求標頭、Cookie 或查詢字串進行快取,則會 CloudFront 將具有唯一快取金鑰的所有要求 CloudFront 轉寄至您的來源。

如果您想要防止所有要求崩潰,您可以使用 Managed 緩存策略CachingDisabled,這也可以防止緩存。如需詳細資訊,請參閱 使用受管快取政策

若您想防止特定物件的請求折疊,您可以將快取行為的最短 TTL 設為 0 設定原始伺服器傳送 Cache-Control: privateCache-Control: no-storeCache-Control: no-cacheCache-Control: max-age=0Cache-Control: s-maxage=0。這些設定會增加原始伺服器的負載,並為暫停的同時要求產生額外的延遲,同時 CloudFront 等待第一個要求的回應。

User-Agent 標頭

如果您想 CloudFront 要根據使用者用來檢視內容的裝置快取不同版本的物件,建議您設定為將下列一或多個標頭轉寄 CloudFront 至您的自訂來源:

  • CloudFront-Is-Desktop-Viewer

  • CloudFront-Is-Mobile-Viewer

  • CloudFront-Is-SmartTV-Viewer

  • CloudFront-Is-Tablet-Viewer

根據標User-Agent頭的值,將這些標頭的值 CloudFront 設置為true或轉發請求到您的來源false之前。如果裝置屬於多個類別,一個以上的值可能是 true。例如,對於某些平板電腦裝置, CloudFront 可能會同時CloudFront-Is-Tablet-ViewerCloudFront-Is-Mobile-Viewer和設定為true。如需有關根據要求標頭設定 CloudFront 快取的詳細資訊,請參閱根據請求標頭快取內容

您可以配置 CloudFront 為基於User-Agent標頭中的值緩存對象,但我們不建議這樣做。標User-Agent頭有許多可能的值,並且基於這些值的緩存將導 CloudFront 致將更多請求轉發到您的來源。

如果您沒有設定 CloudFront 為根據User-Agent標頭中的值快取物件,請在 CloudFront 將要求轉送至來源之前,新增具有下列值的User-Agent標頭:

User-Agent = Amazon CloudFront

CloudFront 無論來自檢視器的要求是否包含標頭,都會新增此User-Agent標頭。如果來自檢視器的要求包含標User-Agent頭,請將其 CloudFront 移除。

如何 CloudFront 處理自訂來源的回應

本主題包含有關如何 CloudFront 處理自訂來源回應的資訊。

100 Continue 回應

您的來源無法傳送超過一個 100-繼續回覆給 CloudFront。在第一個 100-繼續回應之後, CloudFront 需要一個 HTTP 200 確定回應。如果您的來源在第一個響應之後發送另一個 100-Continue 響應, CloudFront 將返回錯誤。

快取

  • 確保原始伺服器集為有效且為 DateLast-Modified 標頭欄位準確的值。

  • CloudFront 通常在來自原點的響應中尊重Cache-Control: no-cache標題。如需例外,請參閱相同物件之同步請求 (請求折疊)

已取消請求

如果物件不在邊緣快取中,並且檢視器在從原始物件取 CloudFront 得物件之後終止工作階段 (例如,關閉瀏覽器),則 CloudFront 不會在邊緣位置快取該物件。

內容議價

如果您的來源Vary:*在回應中傳回,且對應快取行為的「最小 TTL」值為 0,則會快取物件, CloudFront 但仍會將物件的每個後續要求轉送至原始位置,以確認快取包含物件的最新版本。CloudFront 不包含任何條件標頭,例如If-None-MatchIf-Modified-Since。因此,您的 origin 會將物件傳回至以 CloudFront 回應每個要求。

如果您的來源Vary:*在回應中傳回,且對應快取行為的「最小 TTL」值是任何其他值,則會依照中可 CloudFront 移除或取代的 HTTP 回應標頭所述 CloudFront 處理Vary標頭。

Cookie

如果您為快取行為啟用 Cookie,並且來源傳回包含物件的 Cookie,則會 CloudFront 快取物件和 Cookie。請注意,這可減少物件的快取能力。如需詳細資訊,請參閱 根據 Cookie 快取內容

捨棄 TCP 連線

如果您的來源將對象返回到時, CloudFront 和您的來源之間的 TCP 連接中斷 CloudFront,則 CloudFront 行為取決於您的來源是否在響應中包含Content-Length頭文件:

  • 內容長度標題-將對象 CloudFront 返回給查看器,因為它從您的原點獲取對象。不過,如果 Content-Length 標頭的值不符合物件的大小, CloudFront 就不會建立物件的快取。

  • 輸編碼:分塊 — 從您的來源取得物件時,將物件 CloudFront 傳回給檢視器。但是,如果區塊回應不完整,則 CloudFront 不會快取物件。

  • 沒有 Content-Length 標頭-將對象 CloudFront 返回給查看器並緩存它,但對象可能不完整。如果沒有Content-Length標頭, CloudFront 則無法確定 TCP 連接是意外還是故意中斷。

我們建議您將 HTTP 伺服器設定為新增Content-Length標頭,以防 CloudFront 止快取部分物件。

可 CloudFront 移除或取代的 HTTP 回應標頭

CloudFront 在將來源的響應轉發給查看器之前,刪除或更新以下標題字段:

  • Set-Cookie— 如果您配置 CloudFront 轉發 cookie,它會轉發標Set-Cookie題字段到客戶端。如需詳細資訊,請參閱 根據 Cookie 快取內容

  • Trailer

  • Transfer-Encoding— 如果您的 origin 傳回此標頭欄位,請在將回應傳回給檢視器chunked之前將值CloudFront 設定為。

  • Upgrade

  • Vary – 請注意以下各項:

    • 如果您設定 CloudFront 將任何裝置特定的標頭轉寄至您的來源 (CloudFront-Is-Desktop-Viewer、、CloudFront-Is-Mobile-ViewerCloudFront-Is-Tablet-Viewer)CloudFront-Is-SmartTV-Viewer,並將原點設定為 CloudFront 返回 CloudFront,則會返回Vary:User-AgentVary:User-Agent給檢視器。如需詳細資訊,請參閱 根據裝置類型設定快取

    • 如果您將來源配置為包含Accept-EncodingCookieVary標題中,請在對查看器的響應中 CloudFront 包含這些值。

    • 如果您配置為將標題轉發 CloudFront 到您的來源,並且如果將 origin 配置為在標頭 CloudFront 中返回標Vary頭名稱(例如,Vary:Accept-Charset,Accept-Language),則將帶有這些值的標Vary頭 CloudFront 返回給查看器。

    • 如需如何 CloudFront 處理Vary標頭*中的值的資訊,請參閱內容議價

    • 如果您將 origin 設定為在Vary標頭中包含任何其他值,請先 CloudFront 移除這些值,然後再將回應傳回給檢視器。

  • Via— 在對檢視器的回應中將值 CloudFront 設定為下列項目:

    Via: http-版本 英數-字串.cloudfront.net (CloudFront)

    例如,如果用戶端透過 HTTP/1.1 發出請求,則值將類似以下內容:

    Via: 1.1 1026589cc7887e7a0dc7827b4example.cloudfront.net (CloudFront)

可快取檔案大小上限

CloudFront 儲存在快取記憶體中的回應主體大小上限為 50 GB。此包含未指定 Content-Length 標頭值的區塊傳輸回應。

您可以使用範圍要求 CloudFront 來要求每個 50 GB 或更小的部分來要求物件,藉此快取大於此大小的物件。 CloudFront緩存這些部分,因為它們每個都是 50 GB 或更小。檢視器擷取物件的所有部分之後,就可以重建原始、較大的物件。如需詳細資訊,請參閱 使用範圍請求快取大物件

原始伺服器無法使用

如果您的原始伺服器無法使用,而且取 CloudFront 得要求位於 Edge 快取中但已過期的物件 (例如,因為指Cache-Control max-age令中指定的期間已過), CloudFront 則可以提供物件的過期版本或提供自訂錯誤頁面。如需關於已設定自訂錯誤頁面時 CloudFront 行為的詳細資訊,請參閱 設定自訂錯誤頁面時如何 CloudFront 處理錯誤

在某些情況下,很少要求的物件會被逐出,而且邊緣快取中不再可用。 CloudFront 不能為已被驅逐的對象提供服務。

重新引導

如果您在原始伺服器中變更物件的位置,您可以設定您的 Web 伺服器重新引導請求至新的位置。設定重新導向之後,檢視者第一次提交物件的要求時, CloudFront Front 會將要求傳送至原點,而來源會以重新導向回應 (例如,302 Moved Temporarily)。 CloudFront 緩存重定向並將其返回給查看器。 CloudFront 不遵循重定向。

您可以設定您的 Web 伺服器重新引導請求以下其中一個位置:

  • 在原始伺服器中物件的新 URL。當檢視器遵循重新導向至新 URL 時,檢視者會略過 CloudFront 並直接前往原點。因此,我們建議您不要重新引導請求到原始伺服器中物件的新 URL。

  • 物件的新 CloudFront URL。當檢視者提交包含新 CloudFront URL 的要求時, CloudFront 會從原始位置的新位置取得物件,在節點位置快取該物件,然後將物件傳回給檢視器。物件的後續請求會被節點提供。這可避免與從原始伺服器檢視器請求的物件有關的延遲和負載。然而,每個物件的新請求將會產生為兩個請求至 CloudFront 的費用。

Transfer-Encoding 標頭

CloudFront 僅支援Transfer-Encoding標頭的chunked值。如果原點傳 CloudFront 回Transfer-Encoding: chunked,則會在邊緣位置接收物件時,將物件傳回給用戶端,並以區塊格式快取物件以供後續要求使用。

如果檢視器提出要Range GET求且 origin 傳回Transfer-Encoding: chunked,則會將整個物件 CloudFront 傳回給檢視器,而不是要求的範圍。

如果您無法預定回應內容的長度,我們建議您使用區塊編碼。如需詳細資訊,請參閱 捨棄 TCP 連線