8.0 KiB
title, description
| title | description |
|---|---|
| Traefik Compress Documentation | Traefik Proxy's HTTP middleware lets you compress responses before sending them to the client. Read the technical documentation. |
Compress
Compress Allows Compressing Responses before Sending them to the Client {: .subtitle }
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
# Enable compression
labels:
- "traefik.http.middlewares.test-compress.compress=true"
# Enable compression
apiVersion: traefik.io/v1alpha1
kind: Middleware
metadata:
name: test-compress
spec:
compress: {}
# Enable compression
- "traefik.http.middlewares.test-compress.compress=true"
# Enable compression
http:
middlewares:
test-compress:
compress: {}
# 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 contains `gzip`, and/or `*`, and/or `br`, and/or `zstd` with or without [quality values](https://developer.mozilla.org/en-US/docs/Glossary/Quality_values).
If the `Accept-Encoding` request header is absent and no [defaultEncoding](#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](#excludedcontenttypes), or is one among the [includedContentTypes options](#includedcontenttypes).
* The response body is larger than the [configured minimum amount of bytes](#minresponsebodybytes) (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.
!!! info "In the case of gzip"
If the `Content-Type` header is not defined, or empty, the compress middleware will automatically [detect](https://mimesniff.spec.whatwg.org/) a content type.
It will also set the `Content-Type` header according to the detected MIME type.
!!! info "gRPC"
Note that `application/grpc` is never compressed.
labels:
- "traefik.http.middlewares.test-compress.compress.excludedcontenttypes=text/event-stream"
apiVersion: traefik.io/v1alpha1
kind: Middleware
metadata:
name: test-compress
spec:
compress:
excludedContentTypes:
- text/event-stream
- "traefik.http.middlewares.test-compress.compress.excludedcontenttypes=text/event-stream"
http:
middlewares:
test-compress:
compress:
excludedContentTypes:
- text/event-stream
[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.
labels:
- "traefik.http.middlewares.test-compress.compress.includedcontenttypes=application/json,text/html,text/plain"
apiVersion: traefik.io/v1alpha1
kind: Middleware
metadata:
name: test-compress
spec:
compress:
includedContentTypes:
- application/json
- text/html
- text/plain
- "traefik.http.middlewares.test-compress.compress.includedcontenttypes=application/json,text/html,text/plain"
http:
middlewares:
test-compress:
compress:
includedContentTypes:
- application/json
- text/html
- text/plain
[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.
!!! tip "Streaming"
When data is sent to the client on flush, the `minResponseBodyBytes` configuration is ignored and the data is compressed.
This is particularly the case when data is streamed to the client when using `Transfer-encoding: chunked` response.
When chunked data is sent to the client on flush, it will be compressed by default even if the received data has not reached
labels:
- "traefik.http.middlewares.test-compress.compress.minresponsebodybytes=1200"
apiVersion: traefik.io/v1alpha1
kind: Middleware
metadata:
name: test-compress
spec:
compress:
minResponseBodyBytes: 1200
- "traefik.http.middlewares.test-compress.compress.minresponsebodybytes=1200"
http:
middlewares:
test-compress:
compress:
minResponseBodyBytes: 1200
[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.
labels:
- "traefik.http.middlewares.test-compress.compress.defaultEncoding=gzip"
apiVersion: traefik.io/v1alpha1
kind: Middleware
metadata:
name: test-compress
spec:
compress:
defaultEncoding: gzip
- "traefik.http.middlewares.test-compress.compress.defaultEncoding=gzip"
http:
middlewares:
test-compress:
compress:
defaultEncoding: gzip
[http.middlewares]
[http.middlewares.test-compress.compress]
defaultEncoding = "gzip"
encodings
Optional, Default="gzip, br, zstd"
encodings specifies the list of supported compression encodings.
At least one encoding value must be specified, and valid entries are gzip (Gzip), br (Brotli), and zstd (Zstandard).
The order of the list also sets the priority, the top entry has the highest priority.
labels:
- "traefik.http.middlewares.test-compress.compress.encodings=zstd,br"
apiVersion: traefik.io/v1alpha1
kind: Middleware
metadata:
name: test-compress
spec:
compress:
encodings:
- zstd
- br
- "traefik.http.middlewares.test-compress.compress.encodings=zstd,br"
http:
middlewares:
test-compress:
compress:
encodings:
- zstd
- br
[http.middlewares]
[http.middlewares.test-compress.compress]
encodings = ["zstd","br"]
