--- title: "Traefik Compress Documentation" description: "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 } ![Compress](../../assets/img/middleware/compress.png) 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 ```yaml tab="Docker & Swarm" # Enable compression labels: - "traefik.http.middlewares.test-compress.compress=true" ``` ```yaml tab="Kubernetes" # Enable compression apiVersion: traefik.io/v1alpha1 kind: Middleware metadata: name: test-compress spec: compress: {} ``` ```yaml tab="Consul Catalog" # Enable compression - "traefik.http.middlewares.test-compress.compress=true" ``` ```yaml tab="File (YAML)" # Enable compression http: middlewares: test-compress: compress: {} ``` ```toml tab="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 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. ```yaml tab="Docker & Swarm" labels: - "traefik.http.middlewares.test-compress.compress.excludedcontenttypes=text/event-stream" ``` ```yaml tab="Kubernetes" apiVersion: traefik.io/v1alpha1 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 ``` ```toml tab="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. ```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"] ``` ### `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. ```yaml tab="Docker & Swarm" labels: - "traefik.http.middlewares.test-compress.compress.minresponsebodybytes=1200" ``` ```yaml tab="Kubernetes" apiVersion: traefik.io/v1alpha1 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 ``` ### `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" ``` ### `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"] ```