mirror of
https://github.com/ninenines/cowboy.git
synced 2025-07-14 12:20:24 +00:00
Update Cowboy to 2.1.0
Also add OTP-20.1.4 to CI.
This commit is contained in:
parent
da304799fe
commit
1e88324864
4 changed files with 112 additions and 3 deletions
4
Makefile
4
Makefile
|
@ -2,7 +2,7 @@
|
|||
|
||||
PROJECT = cowboy
|
||||
PROJECT_DESCRIPTION = Small, fast, modern HTTP server.
|
||||
PROJECT_VERSION = 2.0.0
|
||||
PROJECT_VERSION = 2.1.0
|
||||
PROJECT_REGISTERED = cowboy_clock
|
||||
|
||||
# Options.
|
||||
|
@ -11,7 +11,7 @@ COMPILE_FIRST = cowboy_middleware cowboy_stream cowboy_sub_protocol
|
|||
PLT_APPS = public_key ssl
|
||||
CT_OPTS += -ct_hooks cowboy_ct_hook [] # -boot start_sasl
|
||||
|
||||
CI_OTP ?= OTP-19.0.7 OTP-19.1.6 OTP-19.2.3 OTP-19.3.6.3 OTP-20.0.5 OTP-20.1.3
|
||||
CI_OTP ?= OTP-19.0.7 OTP-19.1.6 OTP-19.2.3 OTP-19.3.6.3 OTP-20.0.5 OTP-20.1.4
|
||||
CI_HIPE ?= $(lastword $(CI_OTP))
|
||||
# CI_ERLLVM ?= $(CI_HIPE)
|
||||
|
||||
|
|
|
@ -73,6 +73,8 @@ include::middlewares.asciidoc[Middlewares]
|
|||
|
||||
= Additional information
|
||||
|
||||
include::migrating_from_2.0.asciidoc[Migrating from Cowboy 2.0 to 2.1]
|
||||
|
||||
include::migrating_from_1.0.asciidoc[Migrating from Cowboy 1.0 to 2.0]
|
||||
|
||||
include::specs.asciidoc[HTTP and other specifications]
|
||||
|
|
107
doc/src/guide/migrating_from_2.0.asciidoc
Normal file
107
doc/src/guide/migrating_from_2.0.asciidoc
Normal file
|
@ -0,0 +1,107 @@
|
|||
[appendix]
|
||||
== Migrating from Cowboy 2.0 to 2.1
|
||||
|
||||
Cowboy 2.1 focused on adding features that were temporarily
|
||||
removed in Cowboy 2.0. A number of bugs found in the 2.0
|
||||
release were also fixed.
|
||||
|
||||
=== Features added
|
||||
|
||||
* It is now possible to obtain the client TLS certificate
|
||||
and the local IP/port for the connection from the Req object.
|
||||
|
||||
* Informational responses (1XX responses) can now be sent.
|
||||
They must be sent before initiating the final response.
|
||||
|
||||
* The `expect: 100-continue` header is now handled
|
||||
automatically. The 100 response will be sent on the
|
||||
first `cowboy_req:read_body/2,3,4` call. This only applies
|
||||
when using the default `cowboy_stream_h` stream handler.
|
||||
|
||||
=== Experimental features added
|
||||
|
||||
Experimental features are previews of features that will be
|
||||
added in a future release. They are not documented and their
|
||||
interface may change at any time. You are welcome to try them
|
||||
and provide feedback.
|
||||
|
||||
* The `cowboy_metrics_h` stream handler can be used to
|
||||
extract metrics out of Cowboy. It must be used first in
|
||||
the list of stream handlers, and will record all events
|
||||
related to requests, responses and spawned processes.
|
||||
When the stream terminates it will pass this information
|
||||
to a user-defined callback.
|
||||
|
||||
* The `cowboy_tracer_h` stream handler can be used to setup
|
||||
automatic tracing of specific requests. You can conditionally
|
||||
enable tracing based on a function, header, path or any other
|
||||
element from the request and the trace will apply to the
|
||||
entire connection and any processes created by it. This is
|
||||
meant to be used for debugging both in tests and production.
|
||||
|
||||
=== Changed behaviors
|
||||
|
||||
* The `cowboy_rest` handler now implements a mechanism for
|
||||
switching to a different type of handler from any callback
|
||||
where `stop` is also allowed. Switch by returning
|
||||
`{switch_handler, Module}` or `{switch_handler, Module, Opts}`.
|
||||
This is especially useful for switching to `cowboy_loop`
|
||||
for streaming the request or response body.
|
||||
|
||||
* REST callbacks that do not allow `stop` as a return value
|
||||
are now explicitly listed in the documentation.
|
||||
|
||||
=== New functions
|
||||
|
||||
* The function `cowboy_req:sock/1` returns the IP/port
|
||||
of the local socket.
|
||||
|
||||
* The function `cowboy_req:cert/1` returns the client
|
||||
TLS certificate or `undefined` if it isn't available.
|
||||
|
||||
* The function `cowboy_req:inform/2,3` sends an
|
||||
informational response.
|
||||
|
||||
=== Bugs fixed
|
||||
|
||||
* Ensure HTTP/2 connections are not closed prematurely
|
||||
when the user code does not read the request body.
|
||||
|
||||
* Ensure HTTP/1.1 streams are not terminated too early.
|
||||
Their behavior is now consistent with the HTTP/2 code
|
||||
where the stream handler is only terminated when the
|
||||
`stop` command is returned.
|
||||
|
||||
* Sending zero-sized data from stream handlers or from
|
||||
`cowboy_req:stream_body/3` could lead to issues with
|
||||
HTTP/1.1. This has been fixed.
|
||||
|
||||
* The final chunk sent by Cowboy when it terminates a
|
||||
chunked body after the handler process exits was not
|
||||
passed through stream handlers, which could lead to
|
||||
issues when `cowboy_compress_h` was being used. This
|
||||
is now corrected.
|
||||
|
||||
* The stream handler state was discarded in some cases
|
||||
where Cowboy had to send a response or response data
|
||||
automatically when ending a stream. This has now
|
||||
been corrected.
|
||||
|
||||
* The stream handler callback `terminate/3` will now be
|
||||
called when switching to another protocol using the
|
||||
command `switch_protocol`. This doesn't apply when
|
||||
doing upgrades to HTTP/2 as those occur before the
|
||||
stream is initialized.
|
||||
|
||||
* Cowlib has been updated to 2.0.1 to fix an issue with
|
||||
Websocket compression when using Erlang/OTP 20.1. Note
|
||||
that at the time of writing all 20.1 versions (from
|
||||
20.1 to 20.1.4) have issues when compression is enabled.
|
||||
It is expected to work properly from 20.1.5 onward. In
|
||||
the meantime it is recommended to run the plain 20.1
|
||||
release and disable Websocket compression, or use a
|
||||
release before 20.1.
|
||||
|
||||
* Cowboy will no longer crash when the `cowboy_clock`
|
||||
process is not running. This can happen when Cowboy
|
||||
is being restarted during upgrades, for example.
|
|
@ -1,6 +1,6 @@
|
|||
{application, 'cowboy', [
|
||||
{description, "Small, fast, modern HTTP server."},
|
||||
{vsn, "2.0.0"},
|
||||
{vsn, "2.1.0"},
|
||||
{modules, ['cowboy','cowboy_app','cowboy_bstr','cowboy_children','cowboy_clear','cowboy_clock','cowboy_compress_h','cowboy_constraints','cowboy_handler','cowboy_http','cowboy_http2','cowboy_iolists','cowboy_loop','cowboy_metrics_h','cowboy_middleware','cowboy_req','cowboy_rest','cowboy_router','cowboy_static','cowboy_stream','cowboy_stream_h','cowboy_sub_protocol','cowboy_sup','cowboy_tls','cowboy_tracer_h','cowboy_websocket']},
|
||||
{registered, [cowboy_sup,cowboy_clock]},
|
||||
{applications, [kernel,stdlib,crypto,cowlib,ranch]},
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue