Brotli

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

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

此沙箱提供透過 HTTPS 提供的回應壓縮範例。

此沙箱涵蓋兩種情境

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

  • 壓縮 Envoy 自身的統計資訊

步驟 1:啟動所有容器

切換到 examples/brotli 目錄,並啟動 docker 組合。

$ pwd
envoy/examples/brotli
$ docker compose pull
$ docker compose up --build -d
$ docker compose ps
Name                 Command                        State          Ports
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
brotli_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
brotli_service_1       python3 /code/service.py       Up (healthy)

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

沙箱設定在連接埠 10000 上有兩個端點用於提供上游檔案

  • /file.txt

  • /file.json

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

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

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

$ curl -ski -H "Accept-Encoding: br" https://127.0.0.1:10000/file.json | grep "content-encoding"
content-encoding: br

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

$ curl -ski -H "Accept-Encoding: br" https://127.0.0.1:10000/file.txt | grep "content-encoding"

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

沙箱設定兩個連接埠來提供 Envoy 的管理和統計資訊介面

  • 9901 公開標準管理介面,不使用 tls

  • 9902 公開具有 tls 的壓縮版管理介面

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

$ curl -ski -H "Accept-Encoding: br" https://127.0.0.1:9901/stats/prometheus | grep "content-encoding"

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

$ curl -ski -H "Accept-Encoding: br" https://127.0.0.1:9902/stats/prometheus | grep "content-encoding"
content-encoding: br

另請參閱

Brotli API

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

壓縮設定

Envoy 壓縮器篩選器的參考文件。

Envoy 管理快速入門指南

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