2022-04-15 13:44:08 +00:00
---
title: "Traefik Compress Documentation"
description: "Traefik Proxy's HTTP middleware lets you compress responses before sending them to the client. Read the technical documentation."
---
2019-02-26 13:50:07 +00:00
# Compress
2022-11-15 09:56:08 +00:00
Compress Allows Compressing Responses before Sending them to the Client
2019-02-26 13:50:07 +00:00
{: .subtitle }
2021-06-11 13:30:05 +00:00
![Compress ](../../assets/img/middleware/compress.png )
2019-02-26 13:50:07 +00:00
2024-06-12 09:38:04 +00:00
The Compress middleware supports Gzip, Brotli and Zstandard compression.
2022-11-15 09:56:08 +00:00
The activation of compression, and the compression method choice rely (among other things) on the request's `Accept-Encoding` header.
2019-02-26 13:50:07 +00:00
## Configuration Examples
2023-05-10 13:28:05 +00:00
```yaml tab="Docker & Swarm"
2022-11-15 09:56:08 +00:00
# Enable compression
2019-03-29 11:34:05 +00:00
labels:
2019-09-23 15:00:06 +00:00
- "traefik.http.middlewares.test-compress.compress=true"
2019-03-29 11:34:05 +00:00
```
2019-06-18 07:50:05 +00:00
```yaml tab="Kubernetes"
2022-11-15 09:56:08 +00:00
# Enable compression
2023-03-20 14:38:08 +00:00
apiVersion: traefik.io/v1alpha1
2019-06-18 07:50:05 +00:00
kind: Middleware
metadata:
name: test-compress
spec:
compress: {}
```
2019-10-15 15:34:08 +00:00
```yaml tab="Consul Catalog"
2022-11-15 09:56:08 +00:00
# Enable compression
2019-10-15 15:34:08 +00:00
- "traefik.http.middlewares.test-compress.compress=true"
```
2019-07-22 07:58:04 +00:00
```yaml tab="File (YAML)"
2022-11-15 09:56:08 +00:00
# Enable compression
2019-07-22 07:58:04 +00:00
http:
middlewares:
test-compress:
compress: {}
```
2021-06-18 22:08:08 +00:00
```toml tab="File (TOML)"
2022-11-15 09:56:08 +00:00
# Enable compression
2021-06-18 22:08:08 +00:00
[http.middlewares]
[http.middlewares.test-compress.compress]
```
2019-09-23 12:32:04 +00:00
!!! info
2021-02-11 13:34:04 +00:00
Responses are compressed when the following criteria are all met:
2024-06-12 09:38:04 +00:00
* 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.
2022-11-15 09:56:08 +00:00
If it is present, but its value is the empty string, then compression is disabled.
2019-09-23 12:32:04 +00:00
* The response is not already compressed, i.e. the `Content-Encoding` response header is not already set.
2024-01-17 10:32:06 +00:00
* The response`Content-Type` header is not one among the [excludedContentTypes options ](#excludedcontenttypes ), or is one among the [includedContentTypes options ](#includedcontenttypes ).
2022-11-15 09:56:08 +00:00
* The response body is larger than the [configured minimum amount of bytes ](#minresponsebodybytes ) (default is `1024` ).
2021-02-11 13:34:04 +00:00
2019-10-31 10:36:05 +00:00
## Configuration Options
### `excludedContentTypes`
2022-11-15 09:56:08 +00:00
_Optional, Default=""_
2021-02-12 11:12:03 +00:00
`excludedContentTypes` specifies a list of content types to compare the `Content-Type` header of the incoming requests and responses before compressing.
2019-10-31 10:36:05 +00:00
2021-02-12 11:12:03 +00:00
The responses with content types defined in `excludedContentTypes` are not compressed.
2019-10-31 10:36:05 +00:00
Content types are compared in a case-insensitive, whitespace-ignored manner.
2024-01-17 10:32:06 +00:00
!!! info
The `excludedContentTypes` and `includedContentTypes` options are mutually exclusive.
2022-11-15 09:56:08 +00:00
!!! 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.
2023-05-10 13:28:05 +00:00
```yaml tab="Docker & Swarm"
2019-10-31 10:36:05 +00:00
labels:
- "traefik.http.middlewares.test-compress.compress.excludedcontenttypes=text/event-stream"
```
```yaml tab="Kubernetes"
2023-03-20 14:38:08 +00:00
apiVersion: traefik.io/v1alpha1
2019-10-31 10:36:05 +00:00
kind: Middleware
metadata:
name: test-compress
spec:
compress:
excludedContentTypes:
- text/event-stream
```
```yaml tab="Consul Catalog"
- "traefik.http.middlewares.test-compress.compress.excludedcontenttypes=text/event-stream"
```
```yaml tab="File (YAML)"
http:
middlewares:
test-compress:
compress:
excludedContentTypes:
- text/event-stream
```
2021-06-18 22:08:08 +00:00
```toml tab="File (TOML)"
[http.middlewares]
[http.middlewares.test-compress.compress]
excludedContentTypes = ["text/event-stream"]
```
2021-09-20 16:00:08 +00:00
2024-01-17 10:32:06 +00:00
### `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.
```yaml tab="Docker & Swarm"
labels:
- "traefik.http.middlewares.test-compress.compress.includedcontenttypes=application/json,text/html,text/plain"
```
```yaml tab="Kubernetes"
apiVersion: traefik.io/v1alpha1
kind: Middleware
metadata:
name: test-compress
spec:
compress:
includedContentTypes:
- application/json
- text/html
- text/plain
```
```yaml tab="Consul Catalog"
- "traefik.http.middlewares.test-compress.compress.includedcontenttypes=application/json,text/html,text/plain"
```
```yaml tab="File (YAML)"
http:
middlewares:
test-compress:
compress:
includedContentTypes:
- application/json
- text/html
- text/plain
```
```toml tab="File (TOML)"
[http.middlewares]
[http.middlewares.test-compress.compress]
includedContentTypes = ["application/json","text/html","text/plain"]
```
2021-09-20 16:00:08 +00:00
### `minResponseBodyBytes`
2022-11-15 09:56:08 +00:00
_Optional, Default=1024_
2021-09-20 16:00:08 +00:00
2022-11-15 09:56:08 +00:00
`minResponseBodyBytes` specifies the minimum amount of bytes a response body must have to be compressed.
2021-09-20 16:00:08 +00:00
Responses smaller than the specified values will not be compressed.
2023-05-10 13:28:05 +00:00
```yaml tab="Docker & Swarm"
2021-09-20 16:00:08 +00:00
labels:
- "traefik.http.middlewares.test-compress.compress.minresponsebodybytes=1200"
```
```yaml tab="Kubernetes"
2023-03-20 14:38:08 +00:00
apiVersion: traefik.io/v1alpha1
2021-09-20 16:00:08 +00:00
kind: Middleware
metadata:
name: test-compress
spec:
compress:
minResponseBodyBytes: 1200
```
```yaml tab="Consul Catalog"
- "traefik.http.middlewares.test-compress.compress.minresponsebodybytes=1200"
```
```yaml tab="File (YAML)"
http:
middlewares:
test-compress:
compress:
minResponseBodyBytes: 1200
```
```toml tab="File (TOML)"
[http.middlewares]
[http.middlewares.test-compress.compress]
minResponseBodyBytes = 1200
2022-04-15 13:44:08 +00:00
```
2024-06-06 14:42:04 +00:00
### `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.
```yaml tab="Docker & Swarm"
labels:
- "traefik.http.middlewares.test-compress.compress.defaultEncoding=gzip"
```
```yaml tab="Kubernetes"
apiVersion: traefik.io/v1alpha1
kind: Middleware
metadata:
name: test-compress
spec:
compress:
defaultEncoding: gzip
```
```yaml tab="Consul Catalog"
- "traefik.http.middlewares.test-compress.compress.defaultEncoding=gzip"
```
```yaml tab="File (YAML)"
http:
middlewares:
test-compress:
compress:
defaultEncoding: gzip
```
```toml tab="File (TOML)"
[http.middlewares]
[http.middlewares.test-compress.compress]
defaultEncoding = "gzip"
```
2024-08-07 14:20:04 +00:00
### `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.
```yaml tab="Docker & Swarm"
labels:
- "traefik.http.middlewares.test-compress.compress.encodings=zstd,br"
```
```yaml tab="Kubernetes"
apiVersion: traefik.io/v1alpha1
kind: Middleware
metadata:
name: test-compress
spec:
compress:
encodings:
- zstd
- br
```
```yaml tab="Consul Catalog"
- "traefik.http.middlewares.test-compress.compress.encodings=zstd,br"
```
```yaml tab="File (YAML)"
http:
middlewares:
test-compress:
compress:
encodings:
- zstd
- br
```
```toml tab="File (TOML)"
[http.middlewares]
[http.middlewares.test-compress.compress]
encodings = ["zstd","br"]
```