aboutsummaryrefslogtreecommitdiffstats
path: root/src
AgeCommit message (Collapse)Author
2019-09-14Implement backpressure on cowboy_req:stream_bodyLoïc Hoguin
This should limit the amount of memory that Cowboy is using when a handler is sending data much faster than the network. The new max_stream_buffer_size is a soft limit and only has an effect when the cowboy_stream_h handler is used.
2019-09-07Improve the cowboy_static consistency across platformsLoïc Hoguin
As a result we explictly reject path_info components that include a forward slash, backward slash or NUL character. This only applies to the [...] part of the path for dir/priv_dir configuration. Also improve the tests so that they work on Windows.
2019-09-06Fix using custom fields in ReqLoïc Hoguin
2019-09-05Fix and optimize sending of WINDOW_UPDATE framesLoïc Hoguin
For long-running connections it was possible for the connection window to become larger than allowed by the protocol because the window increases claimed by stream handlers were never reclaimed even if no data was consumed. The new code applies heuristics to fix this and reduce the number of WINDOW_UPDATE frames that are sent. It includes six new options to control that behavior: margin, max and threshold for both the connection and stream windows. The margin is some extra space added on top of the requested read size. The max is the maximum window size at any given time. The threshold is a minimum window size that must be reached before we even consider sending more WINDOW_UPDATE frames. We also avoid sending WINDOW_UPDATE frames when there is already enough space in the window, or when the read size is 0. Cowlib is set to master until a new tag is done.
2019-08-16Gracefully shut down HTTP/2 connections on GOAWAYLoïc Hoguin
2019-07-16Make Cowboy compatible with upcoming Ranch 2.0juhlig
2019-07-16Data received after RST_STREAM counts toward windowTony Han
2019-04-03Bind erlang:get_stacktrace prior to making other callsSteve Strong
If we bind too late there might be an exception triggered in the terminate function and we will not get the correct stacktrace as a result.
2019-04-01Fallback to host header if authority is missingFredrik Enestad
2018-11-21Move many old HTTP test cases to the rest_handler test suiteLoïc Hoguin
A bug was fixed in cowboy_rest where when content_types_provided returned a media type with a wildcard as first in the list, and a request comes in without an accept header, then the media_type value in the Req object would contain '*' instead of [] for the parameters.
2018-11-19Add an additional test to the static test suiteLoïc Hoguin
2018-11-19Silence expected errors from the static_handler test suiteLoïc Hoguin
2018-11-18Add the chunked option for HTTP/1.1Loïc Hoguin
It allows disabling the chunked transfer-encoding. It can also be disabled on a per-request basis, although it will be ignored for responses that are not streamed.
2018-11-16Add the idle_timeout option to HTTP/2Loïc Hoguin
2018-11-16Add the set_options Websocket commandLoïc Hoguin
It allows overriding the idle_timeout option only for now.
2018-11-16Ensure unknown options are ignored in set_options commandLoïc Hoguin
2018-11-16Allow overriding cowboy_http's idle_timeout per requestLoïc Hoguin
This allows requests that expect to run longer to do so without impacting the configuration of other requests.
2018-11-15Add the set_options stream handler commandLoïc Hoguin
The first two options to benefit from this are the cowboy_compress_h options.
2018-11-15Add a compress_buffering option to cowboy_compress_hLoïc Hoguin
Also changes the behavior to disable buffering by default, so that the default works in all cases, including server-sent events.
2018-11-14Don't send the content-length header in empty 304 responsesLoïc Hoguin
It's OK to send it when set explicitly, as it can be set to what the representation's size would have been.
2018-11-14Ignore the boundary parameter when accepting multipartLoïc Hoguin
2018-11-14Allow disabling keep-alive for HTTP/1.0 connectionsLoïc Hoguin
2018-11-14Document some undefined behavior in cowboy_routerLoïc Hoguin
2018-11-14Don't send an unnecessary content-type header with cowboy_restLoïc Hoguin
2018-11-13Add the {deflate, boolean()} Websocket commandLoïc Hoguin
It allows to temporarily disable Websocket compression when it was negotiated. It's ignored otherwise. This can be used as fine-grained control when some frames do not compress well.
2018-11-12Add deflate options for Websocket compressionLoïc Hoguin
They allow the server to configure what it is willing to accept for both the negotiated configuration (takeover and window bits) and the other zlib options (level, mem_level and strategy). This can be used to reduce the memory and/or CPU footprint of the compressed data, which comes with a cost in compression ratio.
2018-11-11Enable range requests support in cowboy_staticLoïc Hoguin
2018-11-11Add ProvideRangeCallback tests using sendfileLoïc Hoguin
And fix this case when multiple ranges are requested.
2018-11-11Add automatic ranged request handling for bytes unitsLoïc Hoguin
Returning the atom auto instead of a callback informs Cowboy that it needs to handle range requests automatically. This changes the behavior so that the ProvideCallback function is called and then Cowboy splits the data on its own and sends the response without any other user involvement other than defining the ranges_provided/2 callback. This is a quick and dirty way to add range request support to resources, and will be good enough for many cases including for cowboy_static as it also works when the normal response body is a sendfile tuple.
2018-11-09Add sendfile support to cowboy_req:stream_bodyLoïc Hoguin
It is now possible to stream one or more sendfile tuples. A simple example of what can now be done would be for example to build a tar file on the fly using the sendfile syscall for sending the files, or to support Range requests with more than one range with the sendfile syscall. When using cowboy_compress_h unfortunately we have to read the file in order to send it. More options will be added at a later time to make sure users don't read too much into memory. This is a new feature however so existing code is not affected. Also rework cowboy_http's data sending to be flatter.
2018-11-07Add support for range requests (RFC7233) in cowboy_restLoïc Hoguin
This is currently undocumented but is planned to be documented in the next version.
2018-11-05Fix unused type in cowboy_staticLoïc Hoguin
2018-11-05Simplify the code that calls REST callbacksLoïc Hoguin
2018-11-04Add the rate_limited/2 REST callbackLoïc Hoguin
2018-11-03Add an option to disable sendfile for a listenerLoïc Hoguin
2018-11-02Add a charset option to cowboy_staticLoïc Hoguin
2018-11-02Remove the default charset iso-8859-1 in cowboy_restLoïc Hoguin
This requirement was removed in RFC7231 and the rationale behind it was documented in RFC6657.
2018-11-02Add tests for charsets_providedLoïc Hoguin
Fix cases where the q-value is 0 and where a wildcard was sent in the accept-charset header. Also don't send a charset in the content-type of the response if the media type is not text. Thanks to Philip Witty for help figuring this out.
2018-11-02Better handle content negotiation when accept contains charsetsLoïc Hoguin
Thanks to Philip Witty for help figuring this out.
2018-10-31Add compress_threshold protocol optionSteve Domin
Currently the compression threshold is set to 300 and hardcoded in the codebase. There are cases where it make sense to allow this to be configured, for instance when you want to enforce all responses to be compressed regarldess of their size.
2018-10-31Make sure we don't send error_responses on the wrong streamLoïc Hoguin
2018-10-31Handle error_response command in cowboy_metrics_hGrigory Starinkin
2018-10-31Improve a few types, including cowboy_req:req()Loïc Hoguin
2018-10-31Always dialyze tests and fix some cowboy_req specsLoïc Hoguin
2018-10-30Initial support for the PROXY protocol headerLoïc Hoguin
Depend on Ranch master for now since it isn't in any release yet.
2018-10-28Remove a useless todoLoïc Hoguin
2018-10-28Rename a few functions and shuffle argumentsLoïc Hoguin
2018-10-28Remove an unnecessary functionLoïc Hoguin
2018-10-28Exit gracefully on parent exit/sys:terminate/2,3Loïc Hoguin
2018-10-27Fix small issues introduced in the previous commitLoïc Hoguin