Project: Traefik (Orchestration & Management / API Gateway)
File: buffering.md

title: "Traefik Buffering Documentation" description: "The HTTP buffering middleware in Traefik Proxy limits the size of requests that can be forwarded to Services. Read the technical documentation." How to Read the Request before Forwarding It {: .subtitle } The Buffering middleware limits the size of requests that can be forwarded to services. With Buffering, Traefik reads the entire request into memory (possibly buffering large requests into disk), and rejects requests that are over a specified size limit. This can help services avoid large amounts of data (`multipart/form-data` for example), and can minimize the time spent sending data to a service. ```yaml tab="Docker & Swarm" labels: "traefik.http.middlewares.limit.buffering.maxRequestBodyBytes=2000000" ``` ```yaml tab="Kubernetes" apiVersion: traefik.io/v1alpha1 kind: Middleware metadata: name: limit spec: buffering: maxRequestBodyBytes: 2000000 ``` ```yaml tab="Consul Catalog" "traefik.http.middlewares.limit.buffering.maxRequestBodyBytes=2000000" ``` ```yaml tab="File (YAML)" http: middlewares: limit: buffering: maxRequestBodyBytes: 2000000 ``` ```toml tab="File (TOML)" [http.middlewares] [http.middlewares.limit.buffering] maxRequestBodyBytes = 2000000 ``` Optional, Default=0 The `maxRequestBodyBytes` option configures the maximum allowed body size for the request (in bytes). If the request exceeds the allowed size, it is not forwarded to the service, and the client gets a `413` (Request Entity Too Large) response. ```yaml tab="Docker & Swarm" labels: "traefik.http.middlewares.limit.buffering.maxRequestBodyBytes=2000000" ``` ```yaml tab="Kubernetes" apiVersion: traefik.io/v1alpha1 kind: Middleware metadata: name: limit spec: buffering: maxRequestBodyBytes: 2000000 ``` ```yaml tab="Consul Catalog" "traefik.http.middlewares.limit.buffering.maxRequestBodyBytes=2000000" ``` ```yaml tab="File (YAML)" http: middlewares: limit: buffering: maxRequestBodyBytes: 2000000 ``` ```toml tab="File (TOML)" [http.middlewares] [http.middlewares.limit.buffering] maxRequestBodyBytes = 2000000 ``` Optional, Default=1048576 You can configure a threshold (in bytes) from which the request will be buffered on disk instead of in memory with the `memRequestBodyBytes` option. ```yaml tab="Docker & Swarm" labels: "traefik.http.middlewares.limit.buffering.memRequestBodyBytes=2000000" ``` ```yaml tab="Kubernetes" apiVersion: traefik.io/v1alpha1 kind: Middleware metadata: name: limit spec: buffering: memRequestBodyBytes: 2000000 ``` ```yaml tab="Consul Catalog" "traefik.http.middlewares.limit.buffering.memRequestBodyBytes=2000000" ``` ```yaml tab="File (YAML)" http: middlewares: limit: buffering: memRequestBodyBytes: 2000000 ``` ```toml tab="File (TOML)" [http.middlewares] [http.middlewares.limit.buffering] memRequestBodyBytes = 2000000 ``` Optional, Default=0 The `maxResponseBodyBytes` option configures the maximum allowed response size from the service (in bytes). If the response exceeds the allowed size, it is not forwarded to the client. The client gets a `500` (Internal Server Error) response instead. ```yaml tab="Docker & Swarm" labels: "traefik.http.middlewares.limit.buffering.maxResponseBodyBytes=2000000" ``` ```yaml tab="Kubernetes" apiVersion: traefik.io/v1alpha1 kind: Middleware metadata: name: limit spec: buffering: maxResponseBodyBytes: 2000000 ``` ```yaml tab="Consul Catalog" "traefik.http.middlewares.limit.buffering.maxResponseBodyBytes=2000000" ``` ```yaml tab="File (YAML)" http: middlewares: limit: buffering: maxResponseBodyBytes: 2000000 ``` ```toml tab="File (TOML)" [http.middlewares] [http.middlewares.limit.buffering] maxResponseBodyBytes = 2000000 ``` Optional, Default=1048576 You can configure a threshold (in bytes) from which the response will be buffered on disk instead of in memory with the `memResponseBodyBytes` option. ```yaml tab="Docker & Swarm" labels: "traefik.http.middlewares.limit.buffering.memResponseBodyBytes=2000000" ``` ```yaml tab="Kubernetes" apiVersion: traefik.io/v1alpha1 kind: Middleware metadata: name: limit spec: buffering: memResponseBodyBytes: 2000000 ``` ```yaml tab="Consul Catalog" "traefik.http.middlewares.limit.buffering.memResponseBodyBytes=2000000" ``` ```yaml tab="File (YAML)" http: middlewares: limit: buffering: memResponseBodyBytes: 2000000 ``` ```toml tab="File (TOML)" [http.middlewares] [http.middlewares.limit.buffering] memResponseBodyBytes = 2000000 ``` Optional, Default="" You can have the Buffering middleware replay the request using `retryExpression`. ??? example "Retries once in the case of a network error" ```yaml tab="Docker & Swarm" labels: "traefik.http.middlewares.limit.buffering.retryExpression=IsNetworkError() && Attempts() < 2" ``` ```yaml tab="Kubernetes" apiVersion: traefik.io/v1alpha1 kind: Middleware metadata: name: limit spec: buffering: retryExpression: "IsNetworkError() && Attempts() < 2" ``` ```yaml tab="Consul Catalog" "traefik.http.middlewares.limit.buffering.retryExpression=IsNetworkError() && Attempts() < 2" ``` ```yaml tab="File (YAML)" http: middlewares: limit: buffering: retryExpression: "IsNetworkError() && Attempts() < 2" ``` ```toml tab="File (TOML)" [http.middlewares] [http.middlewares.limit.buffering] retryExpression = "IsNetworkError() && Attempts() < 2" ``` The retry expression is defined as a logical combination of the functions below with the operators AND (`&&`) and OR (`||`). At least one function is required: `Attempts()` number of attempts (the first one counts) `ResponseCode()` response code of the service `IsNetworkError()` whether the response code is related to networking error