Compress
Compress Allows Compressing Responses before Sending them to the Client
The Compress middleware supports Gzip, Brotli and Zstandard compression. The activation of compression, and the compression method choice rely (among other things) on the request’s Accept-Encoding
header.
Configuration Examples
Docker & Swarm
# Enable compression
labels:
- "traefik.http.middlewares.test-compress.compress=true"
Kubernetes
# Enable compression
apiVersion: traefik.io/v1alpha1
kind: Middleware
metadata:
name: test-compress
spec:
compress: {}
Consul Catalog
# Enable compression
- "traefik.http.middlewares.test-compress.compress=true"
File (YAML)
# Enable compression
http:
middlewares:
test-compress:
compress: {}
File (TOML)
# Enable compression
[http.middlewares]
[http.middlewares.test-compress.compress]
Info
Responses are compressed when the following criteria are all met:
- The
Accept-Encoding
request header containsgzip
, and/or*
, and/orbr
, and/orzstd
with or without quality values. If theAccept-Encoding
request header is absent and no defaultEncoding is configured, the response won’t be encoded. If it is present, but its value is the empty string, then compression is disabled. - The response is not already compressed, i.e. the
Content-Encoding
response header is not already set. - The response
Content-Type
header is not one among the excludedContentTypes options, or is one among the includedContentTypes options. - The response body is larger than the configured minimum amount of bytes (default is
1024
).
Configuration Options
excludedContentTypes
Optional, Default=””
excludedContentTypes
specifies a list of content types to compare the Content-Type
header of the incoming requests and responses before compressing.
The responses with content types defined in excludedContentTypes
are not compressed.
Content types are compared in a case-insensitive, whitespace-ignored manner.
Info
The excludedContentTypes
and includedContentTypes
options are mutually exclusive.
In the case of gzip
If the Content-Type
header is not defined, or empty, the compress middleware will automatically detect a content type. It will also set the Content-Type
header according to the detected MIME type.
gRPC
Note that application/grpc
is never compressed.
Docker & Swarm
labels:
- "traefik.http.middlewares.test-compress.compress.excludedcontenttypes=text/event-stream"
Kubernetes
apiVersion: traefik.io/v1alpha1
kind: Middleware
metadata:
name: test-compress
spec:
compress:
excludedContentTypes:
- text/event-stream
Consul Catalog
- "traefik.http.middlewares.test-compress.compress.excludedcontenttypes=text/event-stream"
File (YAML)
http:
middlewares:
test-compress:
compress:
excludedContentTypes:
- text/event-stream
File (TOML)
[http.middlewares]
[http.middlewares.test-compress.compress]
excludedContentTypes = ["text/event-stream"]
includedContentTypes
Optional, Default=””
includedContentTypes
specifies a list of content types to compare the Content-Type
header of the responses before compressing.
The responses with content types defined in includedContentTypes
are compressed.
Content types are compared in a case-insensitive, whitespace-ignored manner.
Info
The excludedContentTypes
and includedContentTypes
options are mutually exclusive.
Docker & Swarm
labels:
- "traefik.http.middlewares.test-compress.compress.includedcontenttypes=application/json,text/html,text/plain"
Kubernetes
apiVersion: traefik.io/v1alpha1
kind: Middleware
metadata:
name: test-compress
spec:
compress:
includedContentTypes:
- application/json
- text/html
- text/plain
Consul Catalog
- "traefik.http.middlewares.test-compress.compress.includedcontenttypes=application/json,text/html,text/plain"
File (YAML)
http:
middlewares:
test-compress:
compress:
includedContentTypes:
- application/json
- text/html
- text/plain
File (TOML)
[http.middlewares]
[http.middlewares.test-compress.compress]
includedContentTypes = ["application/json","text/html","text/plain"]
minResponseBodyBytes
Optional, Default=1024
minResponseBodyBytes
specifies the minimum amount of bytes a response body must have to be compressed.
Responses smaller than the specified values will not be compressed.
Docker & Swarm
labels:
- "traefik.http.middlewares.test-compress.compress.minresponsebodybytes=1200"
Kubernetes
apiVersion: traefik.io/v1alpha1
kind: Middleware
metadata:
name: test-compress
spec:
compress:
minResponseBodyBytes: 1200
Consul Catalog
- "traefik.http.middlewares.test-compress.compress.minresponsebodybytes=1200"
File (YAML)
http:
middlewares:
test-compress:
compress:
minResponseBodyBytes: 1200
File (TOML)
[http.middlewares]
[http.middlewares.test-compress.compress]
minResponseBodyBytes = 1200
defaultEncoding
Optional, Default=””
defaultEncoding
specifies the default encoding if the Accept-Encoding
header is not in the request or contains a wildcard (*
).
There is no fallback on the defaultEncoding
when the header value is empty or unsupported.
Docker & Swarm
labels:
- "traefik.http.middlewares.test-compress.compress.defaultEncoding=gzip"
Kubernetes
apiVersion: traefik.io/v1alpha1
kind: Middleware
metadata:
name: test-compress
spec:
compress:
defaultEncoding: gzip
Consul Catalog
- "traefik.http.middlewares.test-compress.compress.defaultEncoding=gzip"
File (YAML)
http:
middlewares:
test-compress:
compress:
defaultEncoding: gzip
File (TOML)
[http.middlewares]
[http.middlewares.test-compress.compress]
defaultEncoding = "gzip"
encodings
Optional, Default=”zstd, br, gzip”
encodings
specifies the list of supported compression encodings. At least one encoding value must be specified, and valid entries are zstd
(Zstandard), br
(Brotli), and gzip
(Gzip). The order of the list also sets the priority, the top entry has the highest priority.
Docker & Swarm
labels:
- "traefik.http.middlewares.test-compress.compress.encodings=zstd,br"
Kubernetes
apiVersion: traefik.io/v1alpha1
kind: Middleware
metadata:
name: test-compress
spec:
compress:
encodings:
- zstd
- br
Consul Catalog
- "traefik.http.middlewares.test-compress.compress.encodings=zstd,br"
File (YAML)
http:
middlewares:
test-compress:
compress:
encodings:
- zstd
- br
File (TOML)
[http.middlewares]
[http.middlewares.test-compress.compress]
encodings = ["zstd","br"]