From: Marcelo Trylesinski Date: Sat, 22 Feb 2025 13:08:52 +0000 (-0300) Subject: Add notes about the GZip middleware (#2880) X-Git-Tag: 0.46.0~4 X-Git-Url: http://git.ipfire.org/gitweb/gitweb.cgi?a=commitdiff_plain;h=abe3554720bc747e905f6e9da13d7d46ec320795;p=thirdparty%2Fstarlette.git Add notes about the GZip middleware (#2880) --- diff --git a/docs/middleware.md b/docs/middleware.md index 9e560181..27527d29 100644 --- a/docs/middleware.md +++ b/docs/middleware.md @@ -178,6 +178,14 @@ Handles GZip responses for any request that includes `"gzip"` in the `Accept-Enc The middleware will handle both standard and streaming responses. +??? info "Buffer on streaming responses" + On streaming responses, the middleware will buffer the response before compressing it. + + The idea is that we don't want to compress every small chunk of data, as it would be inefficient. + Instead, we buffer the response until it reaches a certain size, and then compress it. + + This may cause a delay in the response, as the middleware waits for the buffer to fill up before compressing it. + ```python from starlette.applications import Starlette from starlette.middleware import Middleware @@ -198,7 +206,8 @@ The following arguments are supported: * `minimum_size` - Do not GZip responses that are smaller than this minimum size in bytes. Defaults to `500`. * `compresslevel` - Used during GZip compression. It is an integer ranging from 1 to 9. Defaults to `9`. Lower value results in faster compression but larger file sizes, while higher value results in slower compression but smaller file sizes. -The middleware won't GZip responses that already have a `Content-Encoding` set, to prevent them from being encoded twice. +The middleware won't GZip responses that already have either a `Content-Encoding` set, to prevent them from +being encoded twice, or a `Content-Type` set to `text/event-stream`, to avoid compressing server-sent events. ## BaseHTTPMiddleware