Compress
compress 中间件压缩响应,支持 Gzip、Brotli 和 Zstandard 压缩。
配置示例¶
# Enable compression
http:
middlewares:
test-compress:
compress: {}# Enable compression
[http.middlewares]
[http.middlewares.test-compress.compress]# Enable compression
labels:
- "traefik.http.middlewares.test-compress.compress=true"// Enable compression
{
//...
"Tags": [
"traefik.http.middlewares.test-compress.compress=true"
]
}# Enable compression
apiVersion: traefik.io/v1alpha1
kind: Middleware
metadata:
name: test-compress
spec:
compress: {}配置选项¶
| 字段 | 说明 | 默认值 | 必填 |
|---|---|---|---|
excludedContentTypes |
压缩前用于与传入请求及响应的 Content-Type 头比较的内容类型列表。内容类型位于 excludedContentTypes 中的响应不会压缩。比较内容类型时忽略大小写和空白。 excludedContentTypes 与 includedContentTypes 选项互斥。 |
"" | 否 |
defaultEncoding |
当请求没有 Accept-Encoding 头,或该头包含通配符(*)时,指定默认编码。 |
"" | 否 |
encodings |
指定支持的压缩编码列表。必须至少指定一个编码;有效值为 zstd(Zstandard)、br(Brotli)和 gzip(Gzip)。列表顺序也决定优先级,第一项优先级最高。 |
gzip, br, zstd | 否 |
includedContentTypes |
压缩前用于与响应的 Content-Type 头比较的内容类型列表。内容类型位于 includedContentTypes 中的响应会被压缩。比较内容类型时忽略大小写和空白。 excludedContentTypes 与 includedContentTypes 选项互斥。 |
"" | 否 |
minResponseBodyBytes |
`响应体必须达到的最小字节数,才会进行压缩。 小于指定值的响应不会压缩。 |
1024 | 否 |
启用压缩¶
是否启用压缩以及选择哪种压缩方式,取决于请求的 Accept-Encoding 头等因素。
同时满足以下所有条件时,才会压缩响应:
Accept-Encoding请求头包含gzip、*、br和/或zstd,可以带或不带质量值。 如果缺少Accept-Encoding请求头,则不会对响应编码。 配置defaultEncoding后,即使没有Accept-Encoding,也会对响应编码。 如果存在该请求头,但值为空字符串,则关闭压缩。- 响应尚未压缩,即尚未设置
Content-Encoding响应头。 - 响应的
Content-Type头不属于excludedContentTypes中的类型,或属于includedContentTypes中的类型。 - 响应体大于配置的最小字节数(
minResponseBodyBytes选项),默认值为1024。
空 Content-Type 头¶
如果未定义 Content-Type 头,或其值为空,compress 中间件会自动检测内容类型。
它还会根据检测到的 MIME 类型设置 Content-Type 头。
GRPC 应用¶
请注意,application/grpc 始终不会压缩。