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 管理界面的快速入门指南。