2016-12-22 14:36:07 +01:00
|
|
|
= cowboy_http(3)
|
|
|
|
|
|
|
|
== Name
|
|
|
|
|
|
|
|
cowboy_http - HTTP/1.1
|
|
|
|
|
|
|
|
== Description
|
|
|
|
|
|
|
|
The module `cowboy_http` implements HTTP/1.1 and HTTP/1.0
|
|
|
|
as a Ranch protocol.
|
|
|
|
|
2016-12-22 18:13:25 +01:00
|
|
|
== Options
|
2016-12-22 14:36:07 +01:00
|
|
|
|
2018-11-18 23:03:30 +01:00
|
|
|
// @todo Might be worth moving cowboy_clear/tls options
|
2017-05-05 13:48:25 +02:00
|
|
|
// to their respective manual, when they are added.
|
|
|
|
|
2016-12-22 14:36:07 +01:00
|
|
|
[source,erlang]
|
|
|
|
----
|
|
|
|
opts() :: #{
|
2019-12-04 11:17:34 +01:00
|
|
|
active_n => pos_integer(),
|
2019-10-09 20:54:33 +02:00
|
|
|
chunked => boolean(),
|
|
|
|
connection_type => worker | supervisor,
|
|
|
|
http10_keepalive => boolean(),
|
|
|
|
idle_timeout => timeout(),
|
|
|
|
inactivity_timeout => timeout(),
|
|
|
|
initial_stream_flow_size => non_neg_integer(),
|
|
|
|
linger_timeout => timeout(),
|
|
|
|
logger => module(),
|
|
|
|
max_empty_lines => non_neg_integer(),
|
|
|
|
max_header_name_length => non_neg_integer(),
|
|
|
|
max_header_value_length => non_neg_integer(),
|
|
|
|
max_headers => non_neg_integer(),
|
|
|
|
max_keepalive => non_neg_integer(),
|
|
|
|
max_method_length => non_neg_integer(),
|
|
|
|
max_request_line_length => non_neg_integer(),
|
|
|
|
max_skip_body_length => non_neg_integer(),
|
|
|
|
proxy_header => boolean(),
|
|
|
|
request_timeout => timeout(),
|
|
|
|
sendfile => boolean(),
|
|
|
|
stream_handlers => [module()]
|
2016-12-22 14:36:07 +01:00
|
|
|
}
|
|
|
|
----
|
|
|
|
|
|
|
|
Configuration for the HTTP/1.1 protocol.
|
|
|
|
|
|
|
|
This configuration is passed to Cowboy when starting listeners
|
2017-06-07 15:15:54 +02:00
|
|
|
using `cowboy:start_clear/3` or `cowboy:start_tls/3` functions.
|
2016-12-22 14:36:07 +01:00
|
|
|
|
|
|
|
It can be updated without restarting listeners using the
|
|
|
|
Ranch functions `ranch:get_protocol_options/1` and
|
|
|
|
`ranch:set_protocol_options/2`.
|
|
|
|
|
2016-12-22 18:13:25 +01:00
|
|
|
The default value is given next to the option name:
|
2016-12-22 14:36:07 +01:00
|
|
|
|
2019-12-04 11:17:34 +01:00
|
|
|
active_n (100)::
|
|
|
|
|
|
|
|
The number of packets Cowboy will request from the socket at once.
|
|
|
|
This can be used to tweak the performance of the server. Higher
|
|
|
|
values reduce the number of times Cowboy need to request more
|
|
|
|
packets from the port driver at the expense of potentially
|
|
|
|
higher memory being used.
|
|
|
|
|
2018-11-18 13:21:36 +01:00
|
|
|
chunked (true)::
|
|
|
|
|
|
|
|
Whether chunked transfer-encoding is enabled for HTTP/1.1 connections.
|
|
|
|
Note that a response streamed to the client without the chunked
|
|
|
|
transfer-encoding and without a content-length header will result
|
|
|
|
in the connection being closed at the end of the response body.
|
2019-10-07 12:04:39 +02:00
|
|
|
+
|
|
|
|
This option can be updated at any time using the
|
|
|
|
`set_options` stream handler command.
|
2018-11-18 13:21:36 +01:00
|
|
|
|
2017-05-05 13:48:25 +02:00
|
|
|
connection_type (supervisor)::
|
2018-11-14 12:32:31 +01:00
|
|
|
|
|
|
|
Whether the connection process also acts as a supervisor.
|
2017-05-05 13:48:25 +02:00
|
|
|
|
2018-11-14 17:10:26 +01:00
|
|
|
http10_keepalive (true)::
|
|
|
|
|
|
|
|
Whether keep-alive is enabled for HTTP/1.0 connections.
|
|
|
|
|
2017-05-03 17:44:00 +02:00
|
|
|
idle_timeout (60000)::
|
2018-11-14 12:32:31 +01:00
|
|
|
|
|
|
|
Time in ms with no data received before Cowboy closes the connection.
|
2019-10-07 12:04:39 +02:00
|
|
|
+
|
|
|
|
This option can be updated at any time using the
|
|
|
|
`set_options` stream handler command.
|
2017-05-03 17:44:00 +02:00
|
|
|
|
2017-05-05 13:48:25 +02:00
|
|
|
inactivity_timeout (300000)::
|
2018-11-14 12:32:31 +01:00
|
|
|
|
|
|
|
Time in ms with nothing received at all before Cowboy closes the connection.
|
2017-05-05 13:48:25 +02:00
|
|
|
|
2019-10-09 20:54:33 +02:00
|
|
|
initial_stream_flow_size (65535)::
|
|
|
|
|
|
|
|
Amount of data in bytes Cowboy will read from the socket
|
|
|
|
right after a request was fully received. This is a soft
|
|
|
|
limit.
|
|
|
|
|
2018-05-16 16:01:30 +02:00
|
|
|
linger_timeout (1000)::
|
2018-11-14 12:32:31 +01:00
|
|
|
|
|
|
|
Time in ms that Cowboy will wait when closing the connection. This is
|
|
|
|
necessary to avoid the TCP reset problem as described in the
|
|
|
|
https://tools.ietf.org/html/rfc7230#section-6.6[section 6.6 of RFC7230].
|
2018-05-16 16:01:30 +02:00
|
|
|
|
2019-10-07 11:43:44 +02:00
|
|
|
logger (error_logger)::
|
|
|
|
|
|
|
|
The module that will be used to write log messages.
|
|
|
|
|
2016-12-22 14:36:07 +01:00
|
|
|
max_empty_lines (5)::
|
2018-11-14 12:32:31 +01:00
|
|
|
|
|
|
|
Maximum number of empty lines before a request.
|
2016-12-22 14:36:07 +01:00
|
|
|
|
|
|
|
max_header_name_length (64)::
|
2018-11-14 12:32:31 +01:00
|
|
|
|
|
|
|
Maximum length of header names.
|
2016-12-22 14:36:07 +01:00
|
|
|
|
|
|
|
max_header_value_length (4096)::
|
2018-11-14 12:32:31 +01:00
|
|
|
|
|
|
|
Maximum length of header values.
|
2016-12-22 14:36:07 +01:00
|
|
|
|
|
|
|
max_headers (100)::
|
2018-11-14 12:32:31 +01:00
|
|
|
|
|
|
|
Maximum number of headers allowed per request.
|
2016-12-22 14:36:07 +01:00
|
|
|
|
2020-05-20 11:08:58 +02:00
|
|
|
max_keepalive (1000)::
|
2018-11-14 12:32:31 +01:00
|
|
|
|
|
|
|
Maximum number of requests allowed per connection.
|
2016-12-22 14:36:07 +01:00
|
|
|
|
|
|
|
max_method_length (32)::
|
2018-11-14 12:32:31 +01:00
|
|
|
|
|
|
|
Maximum length of the method.
|
2016-12-22 14:36:07 +01:00
|
|
|
|
2017-05-05 13:48:25 +02:00
|
|
|
max_request_line_length (8000)::
|
2018-11-14 12:32:31 +01:00
|
|
|
|
|
|
|
Maximum length of the request line.
|
2017-05-05 13:48:25 +02:00
|
|
|
|
2017-12-07 22:12:34 +01:00
|
|
|
max_skip_body_length (1000000)::
|
2018-11-14 12:32:31 +01:00
|
|
|
|
|
|
|
Maximum length Cowboy is willing to skip when the user code did not read the body fully.
|
|
|
|
When the remaining length is too large or unknown Cowboy will close the connection.
|
2017-12-07 22:12:34 +01:00
|
|
|
|
2018-11-14 12:32:31 +01:00
|
|
|
proxy_header (false)::
|
|
|
|
|
|
|
|
Whether incoming connections have a PROXY protocol header. The
|
|
|
|
proxy information will be passed forward via the `proxy_header`
|
|
|
|
key of the Req object.
|
2016-12-22 14:36:07 +01:00
|
|
|
|
|
|
|
request_timeout (5000)::
|
2018-11-14 12:32:31 +01:00
|
|
|
|
|
|
|
Time in ms with no requests before Cowboy closes the connection.
|
2016-12-22 14:36:07 +01:00
|
|
|
|
2018-11-03 18:55:40 +01:00
|
|
|
sendfile (true)::
|
2018-11-14 12:32:31 +01:00
|
|
|
|
|
|
|
Whether the sendfile syscall may be used. It can be useful to disable
|
|
|
|
it on systems where the syscall has a buggy implementation, for example
|
|
|
|
under VirtualBox when using shared folders.
|
2018-11-03 18:55:40 +01:00
|
|
|
|
2017-05-05 13:48:25 +02:00
|
|
|
stream_handlers ([cowboy_stream_h])::
|
2018-11-14 12:32:31 +01:00
|
|
|
|
|
|
|
Ordered list of stream handlers that will handle all stream events.
|
2017-05-05 13:48:25 +02:00
|
|
|
|
2016-12-22 14:36:07 +01:00
|
|
|
== Changelog
|
|
|
|
|
2019-12-04 11:17:34 +01:00
|
|
|
* *2.8*: The `active_n` option was added.
|
2019-10-09 20:54:33 +02:00
|
|
|
* *2.7*: The `initial_stream_flow_size` and `logger` options were added.
|
2018-11-18 13:21:36 +01:00
|
|
|
* *2.6*: The `chunked`, `http10_keepalive`, `proxy_header` and `sendfile` options were added.
|
2018-05-16 16:01:30 +02:00
|
|
|
* *2.5*: The `linger_timeout` option was added.
|
2017-12-07 22:12:34 +01:00
|
|
|
* *2.2*: The `max_skip_body_length` option was added.
|
2017-05-05 13:48:25 +02:00
|
|
|
* *2.0*: The `timeout` option was renamed `request_timeout`.
|
|
|
|
* *2.0*: The `idle_timeout`, `inactivity_timeout` and `shutdown_timeout` options were added.
|
2016-12-22 14:36:07 +01:00
|
|
|
* *2.0*: The `max_method_length` option was added.
|
2016-12-22 18:30:52 +00:00
|
|
|
* *2.0*: The `max_request_line_length` default was increased from 4096 to 8000.
|
2017-05-05 13:48:25 +02:00
|
|
|
* *2.0*: The `connection_type` option was added.
|
|
|
|
* *2.0*: The `env` option is now a map instead of a proplist.
|
|
|
|
* *2.0*: The `stream_handlers` option was added.
|
|
|
|
* *2.0*: The `compress` option was removed in favor of the `cowboy_compress_h` stream handler.
|
2016-12-22 14:36:07 +01:00
|
|
|
* *2.0*: Options are now a map instead of a proplist.
|
|
|
|
* *2.0*: Protocol introduced. Replaces `cowboy_protocol`.
|
|
|
|
|
|
|
|
== See also
|
|
|
|
|
|
|
|
link:man:cowboy(7)[cowboy(7)],
|
|
|
|
link:man:cowboy_http2(3)[cowboy_http2(3)],
|
|
|
|
link:man:cowboy_websocket(3)[cowboy_websocket(3)]
|