Skip to content

Commit

Permalink
Add notes about the GZip middleware (#2880)
Browse files Browse the repository at this point in the history
  • Loading branch information
Kludex authored Feb 22, 2025
1 parent a9a8dab commit abe3554
Showing 1 changed file with 10 additions and 1 deletion.
11 changes: 10 additions & 1 deletion docs/middleware.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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

Expand Down

0 comments on commit abe3554

Please sign in to comment.