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

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

CloudFront 如何處理和轉送請求至您的自訂原始伺服器

本主題包含有關 CloudFront 如何處理檢視器請求和轉送請求至自訂原始伺服器的詳細資訊。

身分驗證

針對 DELETEGETHEADPATCHPOSTPUT 請求,如果設定 CloudFront 將 Authorization 標頭轉送到原始伺服器,則您可以設定原始伺服器請求用戶端身分驗證。

針對 OPTIONS 請求,您可以設定原始伺服器只在您使用下列的 CloudFront 設定時,才請求用戶端身分驗證:

您可以設定 CloudFront 使用 HTTP 或 HTTPS,來將請求轉送到您的原始伺服器。如需詳細資訊,請參閱透過 CloudFront 使用 HTTPS

快取持續時間和最短 TTL

若要控制在 CloudFront 將另一個請求轉送到原始伺服器之前,您的物件留存於 CloudFront 快取中的時間長度,您可以:

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

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

  • 使用預設值為 24 小時。

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

用戶端 IP 地址

如果檢視器將請求傳送到 CloudFront,而且未包含 X-Forwarded-For 請求標頭,則 CloudFront 會從 TCP 連線取得檢視器的 IP 地址、加入包含該 IP 地址的 X-Forwarded-For 標頭,然後將該請求轉送給原始伺服器。例如,如果 CloudFront 從 TCP 連線取得 IP 地址 192.0.2.2,則會將下列的標頭轉送到原始伺服器:

X-Forwarded-For: 192.0.2.2

如果檢視器將請求傳送到 CloudFront,並且包含 X-Forwarded-For 請求標頭,則 CloudFront 會從 TCP 連線取得檢視器的 IP 地址、將該 IP 地址附加到 X-Forwarded-For 標頭的結尾,然後將該請求轉送給原始伺服器。例如,如果檢視器的請求包含 X-Forwarded-For: 192.0.2.4,192.0.2.3,而且 CloudFront 從 TCP 連線取得 IP 地址 192.0.2.2,則會將下列的標頭轉送到原始伺服器:

X-Forwarded-For: 192.0.2.4,192.0.2.3,192.0.2.2

某些應用程式,例如負載平衡器 (包括 Elastic Load Balancing)、Web 應用程式防火牆、反向代理伺服器、入侵防護系統和 API Gateway,會針對轉送請求的 CloudFront 邊緣伺服器,將該伺服器的 IP 地址附加到 X-Forwarded-For 標頭的結尾。例如,如果 CloudFront 在轉送給 ELB 的請求中加入 X-Forwarded-For: 192.0.2.2,而且 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:0000:0000:8a2e:0370:7334)。

用戶端 SSL 身分驗證

CloudFront 不支援使用用戶端 SSL 憑證之用戶端身分驗證。如果原始伺服器請求用戶端憑證,CloudFront 會放棄請求。

壓縮

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

條件式請求

如果 CloudFront 收到請求,向邊緣快取要求已過期的物件,會將該請求轉送到原始伺服器,以取得物件的最新版本,或是從原始伺服器取得 CloudFront 邊緣快取已具有最新版本的確認。一般而言,當原始伺服器最後將物件到傳送到 CloudFront 時,會在回應中加入 ETag 值、LastModified 值,或是這兩個值。在 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 Protocols (原始伺服器 SSL 通訊協定) 核取方塊,來選擇通訊協定。如需詳細資訊,請參閱 建立分佈

  • 如果使用 CloudFront API,請利用 OriginSslProtocols 元素來指定通訊協定。如需詳細資訊,請參閱《Amazon CloudFront API 參考》中的 OriginSslProtocolsDistributionConfig

如果該原始伺服器是 Amazon S3 儲存貯體,則 CloudFront 一律使用 TLSv1.2。

重要

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

如需有關使用 CloudFront 搭配 HTTPS 的詳細資訊,請參閱透過 CloudFront 使用 HTTPS。針對檢視器與 CloudFront 之間,以及 CloudFront 與原始伺服器之間的 HTTPS 通訊,如需 CloudFront 支援密碼的清單,請參閱檢視器和 CloudFront 之間支援的通訊協定和密碼

包括本文的 GET 請求

如果檢視器的 GET 請求包含本文,CloudFront 會將 HTTP 狀態碼 403 (禁止) 傳回給檢視器。

HTTP 方法

如果設定 CloudFront 處理其支援的所有 HTTP 方法,CloudFront 會接受從檢視器傳來的下列請求,然後將這些請求轉送到您的自訂原始伺服器:

  • DELETE

  • GET

  • HEAD

  • OPTIONS

  • PATCH

  • POST

  • PUT

CloudFront 一律會快取 GETHEAD 請求的回應。您也可以設定 CloudFront 快取 OPTIONS 請求的回應。CloudFront 不會快取對使用其他方法之請求的回應。

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

重要

如果設定 CloudFront 接受 CloudFront 支援的所有 HTTP 方法,並將這些方法轉送到原始伺服器,請設定您的原始伺服器,來處理所有的方法。例如,如果因為想要使用 POST,而設定 CloudFront 接受和轉送這些方法,則您必須設定原始伺服器,以適當地處理 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,CloudFront 會將標準化 Accept-Encoding 標頭轉送給您的原始伺服器。

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

Accept-Language

CloudFront 移除標頭。

Authorization

  • GETHEAD 請求 – CloudFront 會在將請求轉送到您的原始伺服器之前,移除 Authorization 標頭欄位。

  • OPTIONS 請求 – 如果設定 CloudFront 快取 Authorization 請求的回應,則 CloudFront 會在將請求轉送到原始伺服器之前,移除 OPTIONS 標頭欄位。

    如果未設定 CloudFront 快取 OPTIONS 請求的回應,CloudFront 會將 Authorization 標頭欄位轉送到您的原始伺服器。

  • DELETEPATCHPOST,和 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

除非您已建立 WebSocket 連線,否則 CloudFront 會移除標頭。

否 (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 驗證憑證。

當 CloudFront 收到針對同一個網域中物件的大量 HTTPS 請求時,OCSP 裝訂的效能提升會更加明顯。每個在 CloudFront 節點的伺服器必須提交單獨的驗證請求。當 CloudFront 收到針對同一個網域的大量 HTTPS 請求時,在節點中的每個伺服器很快就會收到來自 CA 的回應,伺服器可將此回應「裝釘」到 SSL 交握中的封包;當檢視器確認憑證為有效時,CloudFront 即可提供請求的物件。如果您的分佈無法取得在 CloudFront 節點更多的流量,新的請求更有可能被導向至尚未向 CA 驗證憑證的伺服器。在這種情況下,檢視器會單獨執行驗證步驟,而且 CloudFront 伺服器會提供物件。該 CloudFront 伺服器也會提交驗證請求至 CA,所以下一次收到包含相同網域名稱的請求時,會有來自 CA 的驗證回應。

持久性連線

當 CloudFront 從您的原始伺服器獲得回應時,會嘗試維持幾秒鐘連線,以確保在該段期間內另一個請求送達。維護持久性連線可節省重新建立 TCP 連線所需的時間,並為後續請求執行另一個 TLS 交握。

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

通訊協定

CloudFront 根據下列項目轉送 HTTP 或 HTTPS 請求到原始伺服器:

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

  • CloudFront 主控台中 Origin Protocol Policy (原始伺服器通訊協定政策) 欄位的值,或者,如果使用 CloudFront API,則為 OriginProtocolPolicy 複雜類型中的 DistributionConfig 元素。在 CloudFront 主控台中,選項為 HTTP Only (僅限 HTTP)HTTPS Only (僅限 HTTPS)Match Viewer (配合檢視器)

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

如果指定 Match Viewer (配合檢視器),CloudFront 會使用檢視器請求中的通訊協定,來將請求轉送到原始伺服器。請注意 CloudFront 僅會在檢視器使用 HTTP 和 HTTPS 通訊協定發出請求時,快取物件一次。

重要

如果 CloudFront 使用 HTTPS 通訊協定來將請求轉送到原始伺服器,而且原始伺服器傳回無效的憑證或自簽憑證,CloudFront 會結束 TCP 連線。

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

查詢字串

您可以設定 CloudFront 是否轉送查詢字串參數至您的原始伺服器。如需詳細資訊,請參閱 根據查詢字串參數快取內容

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

「原始伺服器連線逾時」是嘗試建立與原始伺服器連線時 CloudFront 所等待的秒數。

「原始伺服器連線嘗試次數」是 CloudFront 嘗試連線至原始伺服器的次數。

這些設定共同決定了在容錯移轉至次要原始伺服器 (如果是原始伺服器群組) 或將錯誤回應傳回給檢視器之前,CloudFront 嘗試連線到原始伺服器的時間長度。依預設,CloudFront 會等待 30 秒 (嘗試 3 次,每次 10 秒),然後再嘗試連線至次要原始伺服器或傳回錯誤回應。您可以指定較短的連線逾時、較少的嘗試次數或兩者,以縮短此時間。

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

原始伺服器回應逾時

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

  • 在將請求轉送到原始伺服器之後,CloudFront 等待回應的時間 (以秒為單位)。

  • CloudFront 在收到來自原始伺服器的回應封包後,並在接收下一個封包前所等待的時間 (以秒為單位)。

CloudFront 行為取決於檢視器請求的 HTTP 方法:

  • GETHEAD 請求 – 如果原始伺服器在回應逾時期間未回應或是停止回應,CloudFront 會結束連線。如果指定的原始伺服器連線嘗試次數超過 1,CloudFront 會再次嘗試取得完整的回應。CloudFront 最多可嘗試 3 次,由「原始伺服器連線嘗試次數」設定的值決定。如果原始伺服器在最後一次嘗試時未回應,則 CloudFront 在收到相同原始伺服器上內容的另一個請求之前不會再嘗試。

  • DELETEOPTIONSPATCHPUTPOST 請求 – 如果原始伺服器未在 30 秒內回應,CloudFront 會結束連線,而且不會再嘗試聯絡原始伺服器。用戶端可以視需要重新提交請求。

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

相同物件之同步請求 (流量高峰)

如果 CloudFront 節點收到對物件的請求,而且該物件目前不在快取中或物件已過期,CloudFront 會立即將該請求傳送到您的原始伺服器。如果流量突增 (在原始伺服器回應第一個請求之前,如果有對同一個物件的其他請求送達節點),則在將對該物件的其他請求轉送到您的原始伺服器之前,CloudFront 會短暫的暫停。一般而言,第一個請求的回應會在回應後續請求之前送達 CloudFront 節點。此暫時暫停有助於減少您的原始伺服器上不必要的負載。如果其他的請求不一樣,(例如,因為您設定 CloudFront 根據請求標頭或 Cookie 進行快取),則 CloudFront 會將所有獨特的請求轉送到原始伺服器。

User-Agent 標頭

如果您希望 CloudFront 根據使用者使用以檢視內容的裝置來快取不同的物件版本,我們建議您設定 CloudFront,以將下列其中一或多個標頭轉送至自訂原始伺服器:

  • CloudFront-Is-Desktop-Viewer

  • CloudFront-Is-Mobile-Viewer

  • CloudFront-Is-SmartTV-Viewer

  • CloudFront-Is-Tablet-Viewer

根據 User-Agent 標頭值,CloudFront 將這些標頭值設定為 truefalse,然後將請求轉送至原始伺服器。如果裝置屬於多個類別,一個以上的值可能是 true。例如,針對一些平板電腦裝置,CloudFront 可能將 CloudFront-Is-Mobile-ViewerCloudFront-Is-Tablet-Viewer 同時設定為 true。如需有關如何設定 CloudFront 根據請求標頭進行快取的詳細資訊,請參閱根據請求標頭快取內容

您可以設定 CloudFront 根據 User-Agent 標頭中的值來快取物件,但我們不建議這麼做。User-Agent 標頭有許多可能的值,且根據這些值進行快取可能導致 CloudFront 轉送更多請求到原始伺服器。

如果未設定 CloudFront 根據 User-Agent 標頭中的值來快取物件,CloudFront 會在轉送請求到您的原始伺服器之前,加入具有下列值的 User-Agent 標頭:

User-Agent = Amazon CloudFront

無論檢視器所傳來的請求是否包含 User-Agent 標頭,CloudFront 都會加入此標頭。如果檢視器所傳來的請求包含 User-Agent 標頭,CloudFront 會移除此標頭。

CloudFront 如何處理來自您的自訂原始伺服器的回應

本主題包含有關 CloudFront 如何處理來自自訂原始伺服器回應的詳細資訊。

100 Continue 回應

您的原始伺服器無法傳送一個以上的 100-Continue 回應給 CloudFront。在第一個 100-Continue 回應之後,CloudFront 會預期 HTTP 200 OK 回應。如果您的原始伺服器在第一個 100-Continue 回應之後傳送另一個回應,CloudFront 將傳回錯誤。

快取

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

  • CloudFront 通常會遵循原始伺服器回應中的 Cache-Control: no-cache 標頭。如需例外,請參閱相同物件之同步請求 (流量高峰)

已取消請求

如果物件不在邊緣快取中,而且在 CloudFront 從原始伺服器取得物件之後,但尚未傳送請求的物件之前,檢視器就終止了工作階段 (例如,關閉瀏覽器),則 CloudFront 不會在節點快取物件。

內容議價

如果您的原始伺服器在回應中傳回 Vary:*,而且對應快取行為的 Minimum TTL (最短 TTL) 值為 0,則 CloudFront 會快取物件,但仍會將對於該物件的每個後續請求,轉送到原始伺服器,以確認快取包含物件的最新版本。CloudFront 不包含任何條件式標頭,例如 If-None-MatchIf-Modified-Since。因此,您的原始伺服器傳回物件至 CloudFront 以回應每個請求。

如果您的原始伺服器在回應中傳回 Vary:*,而且對應快取行為的 Minimum TTL (最短 TTL) 值是任何其他的值,則 CloudFront 會根據 Vary中的說明,來處理 CloudFront 移除或取代的 HTTP 回應標頭 標頭。

Cookie

如果您為快取行為啟用 Cookie,而且如果原始伺服器依物件傳回 Cookie 時,CloudFront 會快取物件和 Cookie。請注意,這可減少物件的快取能力。如需詳細資訊,請參閱 根據 Cookie 快取內容

捨棄 TCP 連線

如果在您的原始伺服器將物件傳回 CloudFront 時,CloudFront 與原始伺服器之間的 TCP 連線中斷,則 CloudFront 行為取決於您的原始伺服器是否在回應中包含 Content-Length 標頭:

  • Content-Length 標頭 – CloudFront 會在從您的原始伺服器取得物件時,將物件傳回給檢視器。不過,如果 Content-Length 標頭的值不符合物件的大小,CloudFront 不會快取物件。

  • Transfer-Encoding: Chunked – 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 – 如果原始伺服器傳回此標頭欄位,CloudFront 會將此值設定為 chunked,再將回應傳回給檢視器。

  • Upgrade

  • Vary – 請注意以下各項:

    • 如果設定 CloudFront 將任何裝置特定的標頭,轉送到您的原始伺服器 (CloudFront-Is-Desktop-ViewerCloudFront-Is-Mobile-ViewerCloudFront-Is-SmartTV-ViewerCloudFront-Is-Tablet-Viewer),而且設定原始伺服器將 Vary:User-Agent 傳回給 CloudFront,則 CloudFront 會將 Vary:User-Agent 傳回給檢視器。如需詳細資訊,請參閱 根據裝置類型設定快取

    • 如果設定原始伺服器,在 Accept-Encoding 標頭中加入 CookieVary,則 CloudFront 會在給檢視器的回應中加入這些值。

    • 如果您設定 CloudFront 將標頭轉送到原始伺服器,並且設定原始伺服器將 Vary 標頭中的標頭名稱傳回給 CloudFront (例如,Vary:Accept-Charset,Accept-Language),則 CloudFront 會將 Vary 標頭及這些值傳回給瀏覽者。

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

    • 如果設定原始伺服器在 Vary 標頭中加入其他任何值,CloudFront 會移除這些值,再將回應傳回給檢視器。

  • Via – CloudFront 在對檢視器的回應中將值設為以下值:

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

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

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

檔案大小上限

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

停用快取時,CloudFront 可以從原始伺服器擷取大於 30 GB 的物件,並將其傳遞給檢視器。不過,CloudFront 不會快取物件。

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

原始伺服器無法使用

如果您的原始伺服器無法使用,而且 CloudFront 收到了請求,要求邊緣快取中已過期的物件 (例如,因為 Cache-Control max-age 指令中所指定的期間已過),則 CloudFront 會提供該物件已過期的版本,或是提供自訂的錯誤頁面。如需有關已設定自訂錯誤頁面時 CloudFront 行為的詳細資訊,請參閱當您已設定自訂錯誤頁面時,CloudFront 如何處理錯誤

在某些情況下,很少請求的物件會被移出並在節點快取中不可再用。CloudFront 無法提供已移出的物件。

重新引導

如果您在原始伺服器中變更物件的位置,您可以設定您的 Web 伺服器重新引導請求至新的位置。在您設定重新引導之後,檢視器第一次提交對物件的請求時,CloudFront 會傳送請求到原始伺服器,而原始伺服器會以重新引導回應 (例如,302 Moved Temporarily)。CloudFront 會快取此重新引導並傳回給檢視器。CloudFront 不會遵循重新引導。

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

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

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

Transfer-Encoding 標頭

CloudFront 只支援 chunked 標頭的 Transfer-Encoding 值。如果您的原始伺服器傳回 Transfer-Encoding: chunked,CloudFront 會在節點收到物件時,將物件傳回到用戶端,並以區塊格式快取物件,來回應後續的請求。

如果檢視器提出 Range GET 請求,而原始伺服器傳回 Transfer-Encoding: chunked,CloudFront 會將整個物件 (而非請求的範圍) 傳回至檢視器。

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