0
Fork 0
mirror of https://github.com/ninenines/cowboy.git synced 2025-07-14 12:20:24 +00:00
cowboy/doc/src/manual/cowboy_decompress_h.asciidoc
Loïc Hoguin fd9711d949
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.
2024-01-04 15:50:12 +01:00

70 lines
1.8 KiB
Text

= cowboy_decompress_h(3)
== Name
cowboy_decompress_h - Decompress stream handler
== Description
The module `cowboy_decompress_h` decompresses request bodies
automatically when the server supports it.
The only compression algorithm currently supported is the
gzip algorithm. Another limitation is that decompression
is only attempted when gzip is the only content-encoding
in the request.
This stream handler always adds a field to the Req object
with the name `content_decoded` which is treated as a
list of decoded content-encoding values. Currently this
list may only contain the `<<"gzip">>` binary if content
was decoded; or be empty otherwise.
== Options
[source,erlang]
----
opts() :: #{
decompress_enabled => boolean(),
decompress_ratio_limit => non_neg_integer()
}
----
Configuration for the decompress stream handler.
The default value is given next to the option name:
decompress_ratio_limit (20)::
The max ratio of the compressed and decompressed body
before it is rejected with a `413 Payload Too Large`
error response.
+
This option can be updated at any time using the
`set_options` stream handler command.
decompress_enabled (true)::
Whether the handler is enabled by default.
+
This option can be updated using the `set_options`
stream handler command. This allows disabling
decompression for the current stream. Attempts
to enable or disable decompression after starting
to read the body will be ignored.
== Events
The decompress stream handler does not produce any event.
== Changelog
* *2.11*: Module introduced.
== See also
link:man:cowboy(7)[cowboy(7)],
link:man:cowboy_stream(3)[cowboy_stream(3)],
link:man:cowboy_compress_h(3)[cowboy_compress_h(3)],
link:man:cowboy_metrics_h(3)[cowboy_metrics_h(3)],
link:man:cowboy_stream_h(3)[cowboy_stream_h(3)],
link:man:cowboy_tracer_h(3)[cowboy_tracer_h(3)]