Cowboy 2.6 greatly refactored the HTTP/2 code, a large part of which was moved to Cowlib and is now used by both the Cowboy server and the Gun client.
A large number of tickets were also closed which resulted in many bugs fixed and many features and options added, although some of them are still experimental.
proxy_header option. The proxy information can then be found under the proxy_info key in the Req object.
cowboy_req:stream_body/3 and in the data command in stream handlers. The only caveat is that when using cowboy_compress_h the sendfile tuples may have to be converted to in-memory data in order to compress them. This is the case for gzip compression.
cowboy_stream_h and cowboy_compress_h are now documented.
chunked option to allow disabling chunked transfer-encoding for HTTP/1.1 connections.
http10_keepalive option to allow disabling keep-alive for HTTP/1.0 connections.
idle_timeout option for HTTP/2.
sendfile option to both HTTP/1.1 and HTTP/2. It allows disabling the sendfile syscall entirely for all connections. It is recommended to disable sendfile when using VirtualBox shared folders.
rate_limited/2 callback to REST handlers.
deflate_opts option to Websocket handlers that allows configuring deflate options for the permessage-deflate extension.
charset option to cowboy_static.
ranges_accepted/2 and range_satisfiable/2 along with the user-specified ProvideRangeCallback/2.
auto from ranges_accepted/2. Cowboy will call the configured ProvideCallback and then split the output automatically for the ranged response.
cowboy_static.
{deflate, boolean()} Websocket handler command to disable permessage-deflate compression temporarily.
compress_threshold option which allows configuring how much data must be present in a response body to compress it. This only applies to non-streamed bodies at this time.
compress_buffering option which allows controlling whether some buffering may be done when streaming a response body. Change the default behavior to not buffer to make sure it works by default in all scenarios.
{set_options, map()} command to stream handlers and Websocket handlers. This can be used to update options on a per-request basis. Allow overriding the idle_timeout option for both HTTP/1.1 and Websocket, the cowboy_compress_h options for HTTP/1.1 and HTTP/2 and the chunked option for HTTP/1.1.
charsets_provided when it is present in the accept header when using REST handlers.
cowboy_metrics_h.
cowboy_router behavior has been documented.
Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:
Recurring payment options are also available via GitHub Sponsors. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.