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
公開標準管理介面,不使用 tls9902
公開具有 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 管理介面的快速入門指南。