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

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

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

若要瞭解使用自訂來源時如何 CloudFront 處理要求和回應,請參閱下列章節:

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

瞭解如何 CloudFront 處理檢視者要求,並將請求轉寄至您的自訂來源。

身分驗證

如果您將標Authorization頭轉寄到原始伺服器,則可以將原始伺服器設定為要求下列類型的要求的用戶端驗證:

  • DELETE

  • GET

  • HEAD

  • PATCH

  • PUT

  • POST

針對OPTIONS要求,只有在您使用下列設定時,才能 CloudFront設定用戶端驗證:

  • CloudFront 被配置為將Authorization標題轉發到您的來源

  • CloudFront 配置為緩存對OPTIONS請求的響應

如需詳細資訊,請參閱 設定 CloudFront 以轉寄標Authorization頭

您可以使用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閘道,會將轉寄要求的 CloudFront 邊緣伺服器 IP 位址附加到標頭的X-Forwarded-For結尾。例如,如果在要求X-Forwarded-For: 192.0.2.2中CloudFront 包含要求,ELB且 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地址(例如:0 分貝 8:85:8a2e:

另請注意,當前服務器(CloudFront)路徑上的每個節點都可以修改X-Forwarded-For頭文件。如需詳細資訊,請參閱 RFC7239 中的第 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 狀態碼 (未修改)。

注意

If-Modified-Since當設定為轉寄 Cookie (全部或子集) 時 CloudFront ,則不支援If-None-Match條件式要求。

如需詳細資訊,請參閱根據餅乾緩存內容

Cookie

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

跨源資源共享()CORS

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

加密

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

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

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

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

如果來源是 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 支援的HTTP方法,請將原始伺服器設定為處理所有方法。例如,如果您因為想要使用而設定 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請求的響應,則將Authorization頭字段轉發CloudFront 到您的來源。

  • 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題字段。如需詳細資訊,請參閱「根據餅乾緩存內容」。

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 處理物件 (範圍GETs) 的部分要求

是,根據預設。

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 使用 /1.1 將請求轉發到您的自訂來HTTP源。

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

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

CloudFront 從請求構URL造一個。這個的最大長度URL是 8192 個字節。

如果要求或URL超過這些上限,會將HTTP狀態碼 413「要求實體太大」 CloudFront 傳回給檢視器,然後終止與檢視器的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 主控台中「原始通訊協定原則」欄位的值,或者,如果您使用的 CloudFront API是DistributionConfig複雜類型中的OriginProtocolPolicy元素。在 CloudFront 主控台中,選項為「僅」、HTTPS「HTTP僅」和「比對檢視器」。

如果您指定「HTTP僅」或「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 轉寄至您的來源。

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

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

重要

目前, CloudFront 如果您在快取原則、原始要求原則或舊版快取設定中啟用 Cookie 轉送,則不支援要求收合。

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 OK 回應。如果您的來源在第一個響應之後發送另一個 100-Continue 響應, CloudFront 將返回錯誤。

快取

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

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

已取消請求

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

內容議價

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

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

Cookie

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

連線中TCP斷

如果當您的 origin 返回對象時, CloudFront 和您的 origin 之間的TCP連接下降 CloudFront,則 CloudFront 行為取決於您的 origin 是否在響應中包含Content-Length標題:

  • 內容長度標題-將對象 CloudFront返回給查看器,因為它從您的原點獲取對象。但是,如果標Content-Length頭的值與對象的大小不匹配,則 CloudFront 不會緩存該對象。

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

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

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

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

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

  • Set-Cookie— 如果您配置 CloudFront 轉發 cookie,它會轉發標Set-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-version alphanumeric-string.cloudfront.net (CloudFront)

    例如,該值如下所示:

    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 將要求傳送至來源,而來源會以重新導向回應 (例如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斷