本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
為自訂原始伺服器之請求和回應行為
若要了解 CloudFront 如何在您使用自訂原始伺服器時處理請求和回應,請參閱下列各節:
CloudFront 如何處理和轉送請求至您的自訂原始伺服器
了解 CloudFront 如何處理檢視器請求,並將請求轉送到您的自訂原始伺服器。
內容
身分驗證
如果您將 Authorization
標頭轉送至原始伺服器,則可以設定原始伺服器,以請求用戶端身分驗證下列類型的請求:
-
DELETE
-
GET
-
HEAD
-
PATCH
-
PUT
-
POST
對於OPTIONS
請求,只有在您使用下列 CloudFront 設定時,才能設定用戶端身分驗證:
-
CloudFront 已設定為將
Authorization
標頭轉送至原始伺服器 -
CloudFront 設定為不快取對
OPTIONS
請求的回應
如需詳細資訊,請參閱 設定 CloudFront 轉送 Authorization標頭。
您可以使用 HTTP 或 HTTPS 將請求轉送至原始伺服器。如需詳細資訊,請參閱搭配 CloudFront 使用 HTTPS。
快取持續時間和最短 TTL
若要控制在 CloudFront 將另一個請求轉送到原始伺服器之前,您的物件留存於 CloudFront 快取中的時間長度,您可以:
-
設定原始伺服器在每個物件中新增
Cache-Control
或Expires
標頭欄位。 -
指定在 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::8a2e:0370:7334)。
另請注意,目前伺服器 (CloudFront) 路徑上的每個節點都可以修改 X-Forwarded-For
標頭。如需詳細資訊,請參閱 RFC 7239
用戶端 SSL 身分驗證
CloudFront 不支援使用用戶端 SSL 憑證之用戶端身分驗證。如果原始伺服器請求用戶端憑證,CloudFront 會放棄請求。
壓縮
如需詳細資訊,請參閱 提供壓縮檔案。
條件式請求
如果 CloudFront 收到請求,向邊緣快取要求已過期的物件,會將該請求轉送到原始伺服器,以取得物件的最新版本,或是從原始伺服器取得 CloudFront 邊緣快取已具有最新版本的確認。一般而言,當原始伺服器最後將物件到傳送到 CloudFront 時,會在回應中加入 ETag
值、LastModified
值,或是這兩個值。在 CloudFront 轉送到原始伺服器的新請求中,CloudFront 會加入下列其中一個或兩個項目:
-
含有已過期版本物件
If-Match
值的If-None-Match
或ETag
標頭。 -
含有已過期版本物件
If-Modified-Since
值的LastModified
標頭。
原始伺服器使用此資訊來判斷物件是否已被更新,且因此是否需傳回整個物件至 CloudFront 或只傳回 HTTP 304 狀態碼 (而非修改)。
注意
若 CloudFront 設為轉送 Cookie (所有或子集),則不支援 If-Modified-Since
和 If-None-Match
條件請求。
如需詳細資訊,請參閱根據 Cookie 快取內容。
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 參考》中的 OriginSslProtocols 和 DistributionConfig。
如果該原始伺服器是 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 一律會快取 GET
與 HEAD
請求的回應。您也可以設定 CloudFront 快取 OPTIONS
請求的回應。CloudFront 不會快取對使用其他方法之請求的回應。
如需有關設定您的自訂原始伺服器是否處理這些方法的詳細資訊,請參閱您的原始伺服器的文件。
重要
如果設定 CloudFront 接受 CloudFront 支援的所有 HTTP 方法,並將這些方法轉送到原始伺服器,請設定您的原始伺服器,來處理所有的方法。例如,如果因為想要使用 POST
,而設定 CloudFront 接受和轉送這些方法,則您必須設定原始伺服器,以適當地處理 DELETE
請求,讓檢視器無法刪除您不希望其刪除的資源。如需詳細資訊,請參閱您的 HTTP 伺服器文件。
HTTP 請求標頭和 CloudFront 行為 (自訂和 Amazon S3 原始伺服器)
下表列出可以轉送到自訂和 Amazon S3 原始伺服器的 HTTP 請求標頭 (已指明例外狀況)。對於每個標頭,該表包含下列資訊:
-
未設定 CloudFront 將標頭轉送到原始伺服器時,CloudFront 的行為,此行為會讓 CloudFront 根據標頭值來快取物件。
-
您是否可以設定 CloudFront 根據該標頭的標頭值來快取物件。
您可以設定 CloudFront 根據
Date
與User-Agent
標頭中的值來快取物件,但我們不建議這麼做。這些標頭有許多可能的值,且根據其值進行快取可能導致 CloudFront 轉送更多請求到原始伺服器。
如需有關根據標頭值快取的詳細資訊,請參閱根據請求標頭快取內容。
標頭 | 未設定 CloudFront 根據標頭值進行快取時的行為 | 支援根據標頭值進行快取 |
---|---|---|
其他定義的標頭 |
舊版快取設定 – CloudFront 轉送標頭至原始伺服器。 |
是 |
|
CloudFront 移除標頭。 |
是 |
|
CloudFront 移除標頭。 |
是 |
|
如果該值包含 |
是 |
|
CloudFront 移除標頭。 |
是 |
|
|
是 |
|
CloudFront 轉送標頭至原始伺服器。 |
否 |
|
CloudFront 在轉送請求至您的原始伺服器之前,不會加入標頭。 如需詳細資訊,請參閱 根據請求的通訊協定設定快取。 |
是 |
|
CloudFront 在轉送請求至您的原始伺服器之前,不會加入標頭。 如需詳細資訊,請參閱 根據裝置類型設定快取。 |
是 |
|
CloudFront 在轉送請求至您的原始伺服器之前,不會加入標頭。 如需詳細資訊,請參閱 根據裝置類型設定快取。 |
是 |
|
CloudFront 在轉送請求至您的原始伺服器之前,不會加入標頭。 如需詳細資訊,請參閱 根據裝置類型設定快取。 |
是 |
|
CloudFront 在轉送請求至您的原始伺服器之前,不會加入標頭。 |
是 |
|
CloudFront 在轉送請求至您的原始伺服器之前,以 |
否 |
|
CloudFront 轉送標頭至原始伺服器。 |
否 |
|
CloudFront 轉送標頭至原始伺服器。 |
是 |
|
CloudFront 轉送標頭至原始伺服器。 |
是 |
|
如果設定 CloudFront 轉送 Cookie,此服務會將 |
否 |
|
CloudFront 轉送標頭至原始伺服器。 |
可以,但不建議 |
|
CloudFront 移除標頭。 |
是 |
|
CloudFront 轉送標頭至原始伺服器。 |
是 |
|
CloudFront 將值設定為與請求的物件相關聯之原始伺服器的網域名稱。 您無法根據 Amazon S3 或 MediaStore 原始伺服器的主機標頭進行快取。 |
是 (自訂) 否 (S3 和 MediaStore) |
|
CloudFront 轉送標頭至原始伺服器。 |
是 |
|
CloudFront 轉送標頭至原始伺服器。 |
是 |
|
CloudFront 轉送標頭至原始伺服器。 |
是 |
|
CloudFront 轉送標頭至原始伺服器。 |
是 |
|
CloudFront 轉送標頭至原始伺服器。 |
是 |
|
CloudFront 轉送標頭至原始伺服器。 |
否 |
|
CloudFront 轉送標頭至原始伺服器。 |
是 |
|
CloudFront 轉送標頭至原始伺服器。 |
否 |
|
CloudFront 移除標頭。 |
否 |
|
CloudFront 移除標頭。 |
否 |
|
CloudFront 移除標頭。 |
否 |
|
CloudFront 轉送標頭至原始伺服器。如需詳細資訊,請參閱 CloudFront 如何處理物件的部分請求 (範圍 GET)。 |
是,根據預設。 |
|
CloudFront 移除標頭。 |
是 |
|
CloudFront 轉送標頭至原始伺服器。 |
否 |
|
CloudFront 移除標頭。 |
否 |
|
CloudFront 移除標頭。 |
否 |
|
CloudFront 轉送標頭至原始伺服器。 |
否 |
|
除非您已建立 WebSocket 連線,否則 CloudFront 會移除標頭。 |
否 (WebSocket 連線除外) |
|
CloudFront 以 |
可以,但不建議 |
|
CloudFront 轉送標頭至原始伺服器。 |
是 |
|
CloudFront 轉送標頭至原始伺服器。 |
是 |
|
CloudFront 在轉送請求至您的原始伺服器之前,將標頭加入檢視器。此標頭值包含可唯一識別請求的加密字串。 |
否 |
|
CloudFront 會移除所有的 |
否 |
|
CloudFront 轉送標頭至原始伺服器。如需詳細資訊,請參閱 用戶端 IP 地址。 |
是 |
|
CloudFront 移除標頭。 |
否 |
|
CloudFront 移除標頭。 |
是 |
|
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 交握。
如需包括如何設定持續連線時間的詳細資訊,請參閱保持連線逾時 (僅限自訂和 VPC 原始伺服器)一節的分佈設定參考。
通訊協定
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 方法:
-
GET
與HEAD
請求 – 如果原始伺服器在回應逾時期間未回應或是停止回應,CloudFront 會結束連線。如果指定的原始伺服器連線嘗試次數超過 1,CloudFront 會再次嘗試取得完整的回應。CloudFront 最多可嘗試 3 次,由「原始伺服器連線嘗試次數」設定的值決定。如果原始伺服器在最後一次嘗試時未回應,則 CloudFront 在收到相同原始伺服器上內容的另一個請求之前不會再嘗試。 -
DELETE
、OPTIONS
、PATCH
、PUT
及POST
請求 – 如果在讀取逾時期間原始伺服器未回應,CloudFront 將會結束連線,並且不再嘗試聯絡原始伺服器。用戶端可以視需要重新提交請求。
如需詳細資訊,包括如何設定原始伺服器回應逾時,請參閱回應逾時 (僅限自訂和 VPC 原始伺服器)。
相同物件之同步請求 (請求折疊)
如果 CloudFront 邊緣節點收到對物件的請求,而且該物件目前不在快取中或快取物件已過期,CloudFront 會立即將該請求傳送到原始伺服器。不過,如果有對相同物件的同步請求,意即:如果在 CloudFront 接收到第一個請求之前,(具有相同快取金鑰) 其他相同物件的請求抵達邊緣節點,則在將其他請求轉送到原始伺服器之前,CloudFront 將暫停。此短暫的暫停有助於減輕原始伺服器的負載。暫停期間,CloudFront 會將原始伺服器請求的回應傳送至接收到的所有請求。這就是所謂的請求摺疊。在 CloudFront 日誌中,會將第一個請求識別為 x-edge-result-type
欄位中的 Miss
,而崩潰的請求會識別為 Hit
。如需有關 CloudFront 日誌的詳細資訊,請參閱 CloudFront 和邊緣函數記錄。
CloudFront 只會摺疊共用快取金鑰的請求。如果其他的請求沒有共用快取金鑰,(例如,因為您設定 CloudFront 根據請求標頭或查詢字串進行快取),則 CloudFront 會將所有獨特的請求轉送到原始伺服器。
如果您想要防止所有請求摺疊,您可以使用受管快取政策 CachingDisabled
,這也可防止快取。如需詳細資訊,請參閱使用受管快取政策。
如果您想要防止特定物件的請求摺疊,您可以將快取行為的最小 TTL 設定為 0,並將原始伺服器設定為傳送 Cache-Control: private
、Cache-Control: no-store
、Cache-Control: no-cache
、 Cache-Control: max-age=0
或 Cache-Control: s-maxage=0
。這些組態會增加原始伺服器的負載,並於 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 將這些標頭值設定為 true
或 false
,然後將請求轉送至原始伺服器。如果裝置屬於多個類別,一個以上的值可能是 true
。例如,針對一些平板電腦裝置,CloudFront 可能將 CloudFront-Is-Mobile-Viewer
與 CloudFront-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 將傳回錯誤。
快取
-
確保原始伺服器集為有效且為
Date
和Last-Modified
標頭欄位準確的值。 -
CloudFront 通常會遵循原始伺服器回應中的
Cache-Control: no-cache
標頭。如需例外,請參閱相同物件之同步請求 (請求折疊)。
已取消請求
如果物件不在邊緣快取中,而且在 CloudFront 從原始伺服器取得物件之後,但尚未傳送請求的物件之前,檢視器就終止了工作階段 (例如,關閉瀏覽器),則 CloudFront 不會在節點快取物件。
內容議價
如果您的原始伺服器在回應中傳回 Vary:*
,而且對應快取行為的 Minimum TTL (最短 TTL) 值為 0,則 CloudFront 會快取物件,但仍會將對於該物件的每個後續請求,轉送到原始伺服器,以確認快取包含物件的最新版本。CloudFront 不包含任何條件式標頭,例如 If-None-Match
或 If-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-Viewer
、CloudFront-Is-Mobile-Viewer
、CloudFront-Is-SmartTV-Viewer
、CloudFront-Is-Tablet-Viewer
),而且設定原始伺服器將Vary:User-Agent
傳回給 CloudFront,則 CloudFront 會將Vary:User-Agent
傳回給檢視器。如需詳細資訊,請參閱 根據裝置類型設定快取。 -
如果設定原始伺服器,在
Accept-Encoding
標頭中加入Cookie
或Vary
,則 CloudFront 會在給檢視器的回應中加入這些值。 -
如果您設定 CloudFront 將標頭轉送到原始伺服器,並且設定原始伺服器將
Vary
標頭中的標頭名稱傳回給 CloudFront (例如,Vary:Accept-Charset,Accept-Language
),則 CloudFront 會將Vary
標頭及這些值傳回給瀏覽者。 -
如需有關 CloudFront 如何處理
*
標頭中Vary
值的詳細資訊,請參閱內容議價。 -
如果設定原始伺服器在
Vary
標頭中加入其他任何值,CloudFront 會移除這些值,再將回應傳回給檢視器。
-
-
Via
– CloudFront 在對檢視器的回應中將值設為以下值:Via:
http-版本
英數-字串
.cloudfront.net (CloudFront)
例如, 值如下:
Via: 1.1 1026589cc7887e7a0dc7827b4example.cloudfront.net (CloudFront)
可快取檔案大小上限
CloudFront 在快取中儲存的回應內文大小上限為 50 GB。此包含未指定 Content-Length
標頭值的區塊傳輸回應。
使用範圍請求方法來請求每個部分為 50 GB 或更小的多部分物件,即可使用 CloudFront 快取大於此大小的物件。CloudFront 會快取這些部分,因為每個部分皆為 50 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 連線。