動態壓縮功能會自動壓縮 Media CDN 提供的回應。一般情況下,透過網路傳送的資料大小可減少 60% 至 85%。
縮減大小可加快下載重要資產的速度,例如樣式表 (CSS)、指令碼 (JavaScript) 和影片資訊清單 (HLS/DASH),進而大幅縮短網頁載入和影片啟動時間。
大型直播影片播放清單 (資訊清單) 含有大量重複資料和擷取作業,包括每個片段的主機和路徑前置字元,以及 HLS 或 DASH 播放清單中繼資料。播放清單載入或播放清單更新下載速度越快,用戶等待剖析及開始下載參照影片片段的時間就越短。HLS 和 DASH 播放清單的總大小通常會減少 90% 以上。
如要進一步瞭解壓縮回應的好處,請參閱網站基礎知識指南。
動態壓縮的運作方式
啟用動態壓縮後,如果用戶端接受其中一種支援的壓縮演算法 (br
或 gzip
),系統就會先壓縮從來源放送的可壓縮內容,再傳送給用戶端。
Media CDN 會在所有符合壓縮條件的回應中加入 Vary: Accept-Encoding
標頭。如需相關資訊,請參閱「無法壓縮的內容」。
此外,如果要求的 Accept-Encoding
標頭指定 br
或 gzip
(並選擇性地包含非零的 q
參數),表示偏好壓縮內容,Media CDN 會執行下列操作:
從回應中移除
Content-Length
標頭;這是為了盡快放送回應,因為在壓縮整個回應之前,系統無法得知完整內容長度。如果是 HTTP/1.1 和更早的版本,Media CDN 不使用Content-Length
時,會在回應中使用Transfer-Encoding: chunked
。壓縮並快取回應後,Media CDN 可以在後續回應中加入
Content-Length
標頭,並將值設為壓縮後內文內容的長度。將
Accept-Ranges
設為none
。這會通知用戶端,系統會忽略這項資源的範圍要求。根據 RFC 9110 第 8.8.3 節的規定,削弱任何強式
ETag
回應標頭。例如,ETag: "xyzzy"
會替換為ETag: W/"xyzzy"
。將
Content-Encoding
標頭設為br
或gzip
,表示所選的壓縮演算法。Media CDN 會根據預期的回應壓縮比和壓縮速度/處理量,選擇最佳壓縮演算法。
如果用戶端支援 Brotli 壓縮,即使其他壓縮演算法在
Accept-Encoding
標頭中具有較高的q
值,系統仍會使用 Brotli 壓縮。HLS 資訊清單只會使用
gzip
壓縮。
Media CDN 會決定壓縮層級,以平衡用戶端的總下載大小和 CPU 費用。壓縮率越高,不一定能提升效能,尤其是在效能較低的行動裝置上更是如此。
設定動態壓縮
您可以在處理要求的路徑上啟用動態壓縮功能。
事前準備
請執行下列步驟:
找出或建立 Media CDN 來源,其中包含可壓縮的內容,隨時可供放送。
找出或建立 Media CDN 服務,並至少包含一項路徑規則。
為路徑規則啟用動態壓縮
根據預設,路徑規則的壓縮模式為停用。
將模式設為自動後,系統就會為每個符合資格的回覆啟用動態壓縮功能。此外,還會指示 Media CDN 自動選擇最佳壓縮演算法。
如要啟用動態壓縮,請按照下列步驟操作:
控制台
前往 Google Cloud 控制台的「Media CDN」頁面。
如要開啟服務的「詳細資料」頁面,並為該服務設定路徑規則,請按一下服務名稱。
如要切換至編輯模式,請按一下「編輯」按鈕。
如要前往「Routing」(路徑) 部分,請按一下「Next」(下一步)。
如要編輯主機規則,請按一下箭頭展開規則。
如要編輯路徑規則,請按一下相應資料列的「編輯」
。在「編輯路徑規則」窗格中,按一下「進階設定」。
選用:在「Route action」(轉送動作) 部分,新增「CDN policy」(CDN 政策) 項目。
CDN 政策可讓 Media CDN 壓縮內容一次,並提供多次,進而節省頻寬並加快傳遞速度。
在「動態壓縮」部分,選取「啟用壓縮」。
如要儲存路徑規則,請按一下「儲存」。
如要儲存服務變更,請按一下「更新服務」。
gcloud 和 YAML
將 Media CDN 設定匯出為 YAML 檔案。使用
gcloud edge-cache services export
指令。gcloud edge-cache services export SERVICE_NAME \ --destination=FILENAME.yaml
更改下列內容:
SERVICE_NAME
:服務名稱FILENAME
:YAML 檔案的名稱
在 YAML 檔案的路由定義中,於
routeAction
下方將compressionMode
設為AUTOMATIC
,如下列範例所示:routing: hostRules: - hosts: - media.example.com pathMatcher: routes pathMatchers: - name: routes routeRules: - priority: 2 origin: origin1 matchRules: - pathTemplateMatch: "/**.m3u8" # HLS playlists - pathTemplateMatch: "/**.mpd" # DASH manifests routeAction: cdnPolicy: defaultTtl: 5s compressionMode: AUTOMATIC
如要更新服務,請從 YAML 檔案匯入 Media CDN 設定。使用
gcloud edge-cache services import
指令。gcloud edge-cache services import SERVICE_NAME \ --source=FILENAME.yaml
Terraform
下列 Terraform 程式碼片段顯示已啟用動態壓縮的路由規則。
設定很快就會傳播到所有邊緣位置。
為路徑啟用動態壓縮功能,且新設定在正式版機器生效後,即使存在未壓縮的快取版本,Media CDN 也會開始壓縮符合資格的回應。Media CDN 擷取及壓縮新內容時,原始伺服器的流量可能會暫時暴增。
停用路由規則的動態壓縮功能
如要停用動態壓縮,請按照下列步驟操作:
控制台
前往 Google Cloud 控制台的「Media CDN」頁面。
如要開啟服務的「詳細資料」頁面,並設定路徑規則,請按一下服務名稱。
如要切換至編輯模式,請按一下「編輯」按鈕。
如要前往「Routing」(路徑) 部分,請按一下「Next」(下一步)。
如要編輯主機規則,請按一下箭頭展開規則。
如要編輯路徑規則,請按一下相應資料列的「編輯」
。在「編輯路徑規則」窗格中,按一下「進階設定」。
在「動態壓縮」部分,取消選取「啟用壓縮」。
如要儲存路徑規則,請按一下「儲存」。
如要儲存服務變更,請按一下「更新服務」。
gcloud 和 YAML
將 Media CDN 設定匯出為 YAML 檔案。使用
gcloud edge-cache services export
指令。gcloud edge-cache services export SERVICE_NAME \ --destination=FILENAME.yaml
更改下列內容:
SERVICE_NAME
:服務名稱FILENAME
:YAML 檔案的名稱
在 YAML 檔案的路徑定義中,將
compressionMode
設為DISABLED
。如要更新服務,請從 YAML 檔案匯入 Media CDN 設定。使用
gcloud edge-cache services import
指令。gcloud edge-cache services import SERVICE_NAME \ --source=FILENAME.yaml
如果特定路徑的動態壓縮功能發生問題 (例如與特定用戶端不相容,如智慧型電視或串流裝置),請停用動態壓縮功能,避免 Media CDN 在該路徑上提供壓縮內容。
為路徑停用動態壓縮功能後,Media CDN 就會停止從快取提供壓縮內容。先前快取的所有壓縮回應都會失效,CDN 會從來源擷取未壓縮的版本。
可壓縮的內容類型
動態壓縮會根據 Content-Type
HTTP 回應標頭,套用至下列 MIME 類型。沒有 Content-Type
標頭的回應不會經過壓縮。
常見的內容類型和 MIME 類型包括:
- HTML 內容:
text/html
- 樣式表:
text/css
- JavaScript:
application/javascript
- JSON:
application/json
- HTTP 即時串流播放清單:
application/x-mpegURL
或application/vnd.apple.mpegURL
- DASH 資訊清單:
application/dash+xml
下表統整了 MIME 類型對壓縮率的影響。
可壓縮的 MIME 類型 | |
---|---|
完全比對 |
application/csv application/javascript application/json application/json+protobuf application/signed-exchange application/wasm application/x-javascript application/x-nacl application/x-plist application/x-pnacl application/x-protobuf application/x-protobuffer application/x-sdch-dictionary application/xml audio/mpegURL font/eot font/otf font/ttf image/pwg-raster image/svg+xml image/vnd.microsoft.icon image/x-icon video/vnd.mpeg.dash.mpd |
模式比對 | application/*+json application/*+xml application/*mpegURL text/* |
圖片和影片格式 (例如 image/jpeg
、image/png
和 video/mpeg4
) 幾乎一律會經過壓縮。因此,Media CDN 不會壓縮這些檔案。重新壓縮已壓縮的回應很少會縮減檔案大小,而且用戶端收到這類回應時,可能會出現非預期的行為。
無法壓縮的回應
如果回應具有下列一或多項特徵,Media CDN 就不會壓縮:
- 回應沒有與可壓縮內容類型相符的
Content-Type
標頭。 - 回覆沒有
Content-Length
標頭。 - 回應含有
Content-Encoding
標頭。這表示來源已壓縮回應。因此,Media CDN 不得進行任何額外的動態壓縮。 回覆內容小於 1 KiB。
壓縮和解壓縮所花費的時間,通常會抵銷任何好處。 此外,可壓縮的內容較少,可能會降低壓縮效果,導致壓縮比偏低。
回應大小超過 1 MiB。
Media CDN 會壓縮回應,但不得超過快取物件的大小上限 (不含位元組範圍快取)。
回應含有
Cache-Control: no-transform
標頭。回應含有
Vary: Accept-Encoding
標頭,表示來源可以壓縮回應,因此不需要動態壓縮。
記錄和監控
啟用壓縮功能後,現有 https/response_bytes_count
指標會回報 edgecache.googleapis.com/EdgeCacheRouteRule
下的壓縮回應大小。可壓縮內容的總回應位元組和輸出資料移轉輸送量應會減少。
Media CDN 記錄檔的 jsonPayload
包含 compressionAlgorithmApplied
欄位,指出負載平衡器是否壓縮回應,以及壓縮類型。
{ insertId: "1c02hw9g3gjay67" jsonPayload: { @type: "type.googleapis.com/google.cloud.edgecache.v1.EdgeCacheLogEntry", cacheId: "IAD-862d661f", cacheStatus": "hit,stale", compressionAlgorithmApplied: "br" }, }
帳單
如果 Media CDN 壓縮回應,相關的輸出快取或網際網路資料移轉費用,會根據傳送給用戶端的最終壓縮位元組計算。
如果您提供大量可壓縮的回應,這有助於減少每月輸出資料傳輸費用,並提升使用者的效能。