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