本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
提供壓縮檔案
請求的物件壓縮後物件較小,下載更快 – 在某些情況下,壓縮後還不到原始檔案的四分之一大小。更快速的下載可以加快檢視器的網頁轉譯速度,尤其是 JavaScript 和 CSS 檔案。此外,CloudFront 資料傳輸的成本是根據服務的總資料量。提供壓縮物件的成本可能低於未壓縮的物件。
設定 CloudFront 壓縮物件
若要設定 CloudFront 壓縮物件,請更新您要提供壓縮物件的快取行為。
設定 CloudFront 壓縮物件 (主控台)
-
登入 CloudFront 主控台
。 -
選擇您的分佈,然後選擇要編輯的行為。
-
針對自動設定的壓縮物件,選擇是。
-
使用快取政策來指定快取設定,並啟用 Gzip 和 Brotli 壓縮格式。
備註
-
您必須使用快取政策來使用 Brotli 壓縮。Brotli 不支援舊版快取設定。
-
若要使用 AWS CloudFormation或 CloudFront API 啟用壓縮,請將
Compress、EnableAcceptEncodingGzip、EnableAcceptEncodingBrotli參數設定為true。
若要了解 CloudFront 如何壓縮物件,請參閱下一節。
CloudFront 壓縮如何運作
-
一個檢視器請求了一個物件。檢視器會在請求中包含
Accept-EncodingHTTP 標頭,而標頭值則包含gzip、br或兩者。這表示檢視器支援壓縮物件。當檢視器同時支援 Gzip 和 Brotli 時,CloudFront 會使用 Brotli。注意
Chrome 和 Firefox Web 瀏覽器僅在使用 HTTPS 傳送請求時支援 Brotli 壓縮。它們不支援具有 HTTP 請求的 Brotli。
-
在節點,CloudFront 會檢查快取中是否有所請求物件的壓縮副本。
-
根據壓縮的物件是否在快取中,CloudFront 會執行下列其中一項操作:
-
如果壓縮的物件已在快取中,CloudFront 會將物件傳送給檢視器,並略過剩餘的步驟。
-
如果壓縮的物件不在快取中,CloudFront 會將請求轉送到原始伺服器。
注意
如果物件的未壓縮副本已存在於快取中,CloudFront 會將該物件傳送至檢視器,而不會將請求轉送至原始伺服器。舉例來說,如果 CloudFront 先前略過壓縮作業,就會發生這種情況。發生這種情況時,CloudFront 會快取未壓縮的物件並繼續提供物件,直到物件過期、移出或無效為止。
-
-
如果原始伺服器傳回壓縮的物件 (如 HTTP 回應中的
Content-Encoding標頭所示),CloudFront 會將壓縮的物件傳送給檢視器,將其新增至快取,並略過剩餘的步驟。CloudFront 不會再次壓縮物件。 -
如果原始伺服器傳回未壓縮的物件到 CloudFront,而 HTTP 回應中沒有
Content-Encoding標頭,則 CloudFront 會決定是否可以壓縮物件。如需詳細資訊,請參閱壓縮的條件。 -
如果物件可以壓縮,CloudFront 會壓縮物件、將其傳送給檢視器,然後將其新增至快取。
-
如果有相同物件的後續瀏覽者請求,CloudFront 會傳回第一個快取版本。例如,如果檢視器請求使用 Gzip 壓縮的特定快取物件,且檢視器接受 Gzip 格式,則對相同物件的後續請求一律會傳回 Gzip 版本,即使檢視器同時接受 Brotli 和 Gzip。
某些自訂原始伺服器也可以壓縮物件。您的原始伺服器可能可以壓縮 CloudFront 未壓縮的物件。如需詳細資訊,請參閱CloudFront 壓縮的檔案類型。
壓縮的條件
下列清單提供 CloudFront 不會壓縮物件之案例的詳細資訊。
- 請求使用 HTTP 1.0
-
如果對 CloudFront 的請求使用 HTTP 1.0,CloudFront 會移除
Accept-Encoding標頭,而不會壓縮回應中的物件。 Accept-Encoding請求標頭-
如果瀏覽者請求中缺少
Accept-Encoding標頭,或者它不包含gzip或br作為值,CloudFront 不會壓縮回應中的物件。如果Accept-Encoding標頭包含額外的值,例如deflate,則 CloudFront 在將請求轉送到原始伺服器之前會先移除這些值。當 CloudFront 設定為壓縮物件時,它會在快取金鑰中和原始伺服器請求中自動包含
Accept-Encoding標頭。 - 當您設定 CloudFront 來壓縮物件時,內容已快取
-
CloudFront 會在從原始伺服器取得物件時壓縮物件。當您設定 CloudFront 來壓縮物件時,CloudFront 不會壓縮已在節點快取的物件。此外,當快取的物件在節點過期,且 CloudFront 將物件的另一個請求轉送到原始伺服器時,CloudFront 不會在您的原始伺服器傳回 HTTP 狀態碼 304 時壓縮物件。這表示節點已有最新版本的物件。如果您想讓 CloudFront 壓縮已在節點快取的物件,您必須讓這些物件失效。如需詳細資訊,請參閱 使檔案失效以移除內容。
- 已配置原始伺服器來壓縮物件
-
如果您設定 CloudFront 壓縮物件,且原始伺服器也壓縮物件,則原始伺服器應包含
Content-Encoding標頭。此標頭會向 CloudFront 指出物件已壓縮。當原始伺服器的回應包含Content-Encoding標頭時,CloudFront 不會壓縮物件,無論標頭的值為何。CloudFront 會將回應傳送給檢視器,並且在節點快取物件。 - CloudFront 壓縮的檔案類型
-
如需完整清單,請參閱 CloudFront 壓縮的檔案類型。
- CloudFront 壓縮的物件大小
-
CloudFront 壓縮的物件大小介於 1,000 個位元組到 10,000,000 個位元組之間。
Content-Length標頭-
原始伺服器必須在回應中包含
Content-Length標頭,以便 CloudFront 判斷物件的大小是否在 CloudFront 壓縮的範圍內。如果Content-Length標頭遺失、包含無效的值,或包含超出 CloudFront 壓縮大小範圍的值,CloudFront 不會壓縮物件。如需 CloudFront 如何處理可能超過大小範圍之大型物件的詳細資訊,請參閱 CloudFront 如何處理物件的部分請求 (範圍 GET)。 - 回應的 HTTP 狀態碼
-
只有在回應的 HTTP 狀態碼為
200、403或404時,CloudFront 才會壓縮物件。 - 回應沒有內文
-
當來自原始伺服器的 HTTP 回應沒有內文時,CloudFront 沒有可以壓縮的內容。
ETag標頭-
CloudFront 有時會在壓縮物件時修改 HTTP 回應中的
ETag標頭。如需詳細資訊,請參閱ETag 標頭轉換。 - CloudFront 略過壓縮作業
-
CloudFront 一般會盡力壓縮物件,在極少數情況下,CloudFront 會在 CloudFront 遇到高流量負載時略過壓縮物件。CloudFront 會根據多種因素 (包括主機容量) 決定是否略過壓縮作業。CloudFront 略過物件的壓縮作業時,會快取未壓縮物件並繼續將物件提供給檢視者,直到物件過期、移出或失效為止。
CloudFront 壓縮的檔案類型
如果您設定 CloudFront 來壓縮物件,則 CloudFront 僅會壓縮 Content-Type 回應標頭中具有下列值的物件:
-
application/dash+xml -
application/eot -
application/font -
application/font-sfnt -
application/javascript -
application/json -
application/opentype -
application/otf -
application/pdf -
application/pkcs7-mime -
application/protobuf -
application/rss+xml -
application/truetype -
application/ttf -
application/vnd.apple.mpegurl -
application/vnd.mapbox-vector-tile -
application/vnd.ms-fontobject -
application/wasm -
application/xhtml+xml -
application/xml -
application/x-font-opentype -
application/x-font-truetype -
application/x-font-ttf -
application/x-httpd-cgi -
application/x-javascript -
application/x-mpegurl -
application/x-opentype -
application/x-otf -
application/x-perl -
application/x-ttf -
font/eot -
font/opentype -
font/otf -
font/ttf -
image/svg+xml -
text/css -
text/csv -
text/html -
text/javascript -
text/js -
text/plain -
text/richtext -
text/tab-separated-values -
text/xml -
text/x-component -
text/x-java-source -
text/x-script -
vnd.apple.mpegurl
ETag 標頭轉換
如果來自原始伺服器的未壓縮物件包含有效的強 ETag HTTP 標頭,CloudFront 壓縮該物件時,CloudFront 會將強 ETag 標頭值轉換為弱 ETag,並將弱 ETag 值傳回給檢視器。檢視器可以儲存弱值 ETag,並使用它來傳送具有 If-None-Match HTTP 標頭的條件式請求。這可讓檢視器 CloudFront 和原始伺服器將物件的壓縮和未壓縮版本視為語義上等效的物件,從而減少不必要的資料傳輸。
有效的強ETag標頭值以雙引號字元 () 開頭和結尾"。若要將強值 ETag 轉換為弱值,CloudFront 會將字元 W/ 新增至強值 ETag 的開頭。
當來自原始伺服器的物件包含弱標頭值 ETag (以字元 W/ 開頭的值) 時,CloudFront 不會修改此值,而是按照從原始伺服器接收的原樣傳回給檢視器。
當原始伺服器的物件包含無效的 ETag 標頭值 (非以 " 或 W/ 開頭的值) 時,CloudFront 會移除 ETag 標頭,並將不含 ETag 回應標頭的物件傳回給檢視器。
如需詳細資訊,請參閱 MDN Web 文件中的下列頁面: