Gzip

透過在 Envoy 中啟用壓縮,您可以節省一些網路頻寬,但會增加處理器使用率。

Envoy 支援請求和回應的壓縮與解壓縮。

此沙盒提供透過 HTTP 提供的回應壓縮和請求解壓縮範例。雖然沒有示範 HTTPS,但壓縮也可以用於此。

此沙盒涵蓋三種情境

  • 來自上游伺服器的檔案壓縮

  • 來自下游用戶端的檔案解壓縮

  • Envoy 本身統計資訊的壓縮

步驟 1:啟動所有容器

變更至 examples/gzip 目錄並啟動 docker 組合。

$ pwd
envoy/examples/gzip
$ docker compose pull
$ docker compose up --build -d
$ docker compose ps
Name                 Command                        State                             Ports
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
gzip_envoy-stats_1   /docker-entrypoint.sh /usr ... Up           0.0.0.0:10000->10000/tcp,:::10000->10000/tcp, 0.0.0.0:9901->9901/tcp,:::9901->9901/tcp, 0.0.0.0:9902->9902/tcp,:::9902->9902/tcp
gzip_service_1       python3 /code/service.py       Up (healthy)

步驟 2:測試 Envoy 對上游檔案的壓縮

此沙盒設定了兩個在連接埠 10000 上服務上游檔案的端點

  • /file.txt

  • /file.json

只有 /file.json 設定為壓縮。

使用 curl 檢查從請求 file.json 的回應是否包含 content-encoding: gzip 標頭。

您需要新增一個 accept-encoding: gzip 請求標頭。

$ curl -si -H "Accept-Encoding: gzip" localhost:10000/file.json | grep "content-encoding"
content-encoding: gzip

由於只有內容類型為 application/json 的檔案設定為 gzip 壓縮,因此請求 file.txt 的回應不應包含 content-encoding: gzip 標頭,且該檔案不會被壓縮。

$ curl -si -H "Accept-Encoding: gzip" localhost:10000/file.txt | grep "content-encoding"

步驟 3:測試 Envoy 對下游檔案的解壓縮

此沙盒設定了一個上傳下游檔案的端點

  • /upload

使用 curl 取得壓縮檔案 file.gz

$ curl -s -H "Accept-Encoding: gzip" -o file.gz localhost:10000/file.json

使用 curl 檢查上傳 file.gz 的回應是否包含 decompressed-size 標頭。

您需要新增 content-encoding: gzip 請求標頭。

$ curl -si -H "Content-Encoding: gzip" localhost:10000/upload --data-binary "@file.gz" | grep "decompressed-size"
decompressed-size: 10485760

步驟 4:測試 Envoy 統計資訊的壓縮

此沙盒設定了兩個連接埠,用於服務 Envoy 的管理員和統計資訊介面

  • 9901 公開標準管理員介面

  • 9902 公開壓縮版本的管理員介面

使用 curl 對連接埠 9901 發出未壓縮統計資訊的請求,回應中不應包含 content-encoding 標頭

$ curl -si -H "Accept-Encoding: gzip" localhost:9901/stats/prometheus | grep "content-encoding"

現在,使用 curl 發出壓縮統計資訊的請求

$ curl -si -H "Accept-Encoding: gzip" localhost:9902/stats/prometheus | grep "content-encoding"
content-encoding: gzip

另請參閱

Gzip 壓縮 API

Envoy gzip 壓縮的 API 和設定參考。

Gzip 解壓縮 API

Envoy gzip 解壓縮的 API 和設定參考。

壓縮設定

Envoy 壓縮器過濾器的參考文件。

解壓縮設定

Envoy 解壓縮器過濾器的參考文件。

Envoy 管理員快速入門指南

Envoy 管理員介面的快速入門指南。