跳到正文
Træfɪk

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 始终不会压缩。


版权所有 © 头文件软件工作室

文档由 HeadFile Studio 翻译。

Traefik v3.7 中文快照 · 原文版权归 Traefik Labs 及贡献者所有 · MIT 许可证