6.6 KiB
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.
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"