本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
提供壓縮檔案
請求的物件壓縮後物件較小,下載更快 – 在某些情況下,壓縮後還不到原始檔案的四分之一大小。更快速的下載可以為您的瀏覽者更快轉譯網頁,尤其是 JavaScript 和 CSS 檔案。此外,CloudFront 資料傳輸的成本是根據服務的總資料量。提供壓縮物件的成本可能低於未壓縮的物件。
設定 CloudFront 壓縮物件
若要設定 CloudFront 壓縮物件,請更新您要提供壓縮物件的快取行為。
設定 CloudFront 壓縮物件 (主控台)
-
登入 CloudFront 主控台
。 -
選擇您的分佈,然後選擇要編輯的行為。
-
針對自動設定的壓縮物件,選擇是。
-
使用快取政策來指定快取設定,並啟用 Gzip 和 Brotli 壓縮格式。
-
將快取政策中的 TTL 設定設為大於零的值。如果您將最短 TTL值設定為零,CloudFront 不會快取壓縮的內容。
備註
-
您必須使用快取政策來使用 Brotli 壓縮。Brotli 不支援舊版快取設定。
-
若要使用 AWS CloudFormation或 CloudFront API 啟用壓縮,請將
Compress
、EnableAcceptEncodingGzip
、EnableAcceptEncodingBrotli
參數設定為true
。
若要了解 CloudFront 如何壓縮物件,請參閱下一節。
CloudFront 壓縮如何運作
-
一個檢視器請求了一個物件。檢視器會在請求中包含
Accept-Encoding
HTTP 標頭,而標頭值則包含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 會壓縮物件、將其傳送給檢視器,然後將其新增至快取。
-
如果有相同物件的後續瀏覽者請求,CloudFront 會傳回第一個快取版本。例如,如果檢視器請求使用 Gzip 壓縮的特定快取物件,且檢視器接受 Gzip 格式,則對相同物件的後續請求一律會傳回 Gzip 版本,即使檢視器同時接受 Brotli 和 Gzip。
某些自訂原始伺服器也可以壓縮物件。您的原始伺服器可能可以壓縮 CloudFront 未壓縮的物件。如需詳細資訊,請參閱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 文件中的下列頁面: