0
Fork 0
mirror of https://github.com/ninenines/cowboy.git synced 2025-07-15 04:30:25 +00:00

Rework and improve the decompress stream handler

The read buffer was changed into an iovec to avoid doing
too many binary concatenations and allocations.

Decompression happens transparently: when decoding gzip,
the content-encoding header is removed (we only decode
when "gzip" is the only encoding so nothing remains).

We always add a content_decoded key to the Req object.
This key contains a list of codings that were decoded,
in the reverse order in which they were. Currently it
can only be empty or contain <<"gzip">> but future
improvements or user handlers may see it contain more
values.

The option to disable decompression was renamed to
decompress_enabled and defaults to true.

It is no longer possible to enable/disable decompression
in the middle of reading the body: this ensures that the
data we pass forward is always valid.

Various smaller improvements were made to the code,
tests and manual pages.
This commit is contained in:
Loïc Hoguin 2024-01-04 15:15:41 +01:00
parent 3ed1b24dd6
commit fd9711d949
No known key found for this signature in database
GPG key ID: 8A9DF795F6FED764
6 changed files with 361 additions and 203 deletions

View file

@ -66,9 +66,9 @@ enabled by default. It is a good example for writing your
own handlers that will modify responses.
link:man:cowboy_decompress_h(3)[cowboy_decompress_h] will
automatically decompress requests when possible. It is not
enabled by default. It is a good example for writing your
own handlers that will modify requests.
automatically decompress request bodies when possible.
It is not enabled by default. It is a good example for
writing your own handlers that will modify requests.
link:man:cowboy_metrics_h(3)[cowboy_metrics_h] gathers
metrics about a stream then passes them to a configurable