mirror of
https://github.com/ninenines/cowboy.git
synced 2025-07-14 20:30:23 +00:00
Remove CHANGELOG
Please consult the appendixes in the user guide.
This commit is contained in:
parent
49d13ece19
commit
804f16c356
1 changed files with 0 additions and 959 deletions
959
CHANGELOG.md
959
CHANGELOG.md
|
@ -1,959 +0,0 @@
|
|||
CHANGELOG
|
||||
=========
|
||||
|
||||
2.0.0-pre.1
|
||||
-----------
|
||||
|
||||
* Drop R16 support
|
||||
|
||||
* Breaking update of the cowboy_req interface
|
||||
|
||||
Simplify the interface for most cowboy_req functions. They all return
|
||||
a single value except the four body reading functions. The reply functions
|
||||
now only return a Req value.
|
||||
|
||||
Access functions do not return a Req anymore.
|
||||
|
||||
Functions that used to cache results do not have a cache anymore.
|
||||
|
||||
The interface for accessing query string and cookies has therefore
|
||||
been changed.
|
||||
|
||||
None of the functions return an error tuple anymore. It either works
|
||||
or crashes. Cowboy will attempt to provide an appropriate status code
|
||||
in the response of crashed handlers.
|
||||
|
||||
As a result, the content decode function has its return value changed
|
||||
to a simple binary, and the body reading functions only return on success.
|
||||
|
||||
* Change interface for reading the query string and cookies
|
||||
|
||||
There are now three query string functions: qs/1 provides access
|
||||
to the raw query string value; parse_qs/1 returns the query string
|
||||
as a list of key/values; match_qs/2 returns a map containing the
|
||||
values requested in the second argument, after applying constraints
|
||||
and default value.
|
||||
|
||||
Similarly, there are two cookie functions: parse_cookies/1 and
|
||||
match_cookies/2. More match functions will be added in future commits.
|
||||
|
||||
* Unify the init and terminate callbacks
|
||||
|
||||
`init/3` becomes `init/2`, its first argument was removed. Its return
|
||||
value has changed, it now returns an `ok` tuple or a `Mod` tuple, the
|
||||
latter allowing to switch to a different handler type and also able
|
||||
to take timeout and hibernate options. The sub protocol interface has
|
||||
been changed and receives these options now.
|
||||
|
||||
rest_init/2 and rest_terminate/2 have been removed.
|
||||
|
||||
websocket_init/3 and websocket_terminate/3 have been removed.
|
||||
|
||||
terminate/3 is now optional. It is called regardless of
|
||||
the type of handler, including REST and Websocket.
|
||||
|
||||
Terminate reasons for all handler types have been documented.
|
||||
The terminate callback is now appropriately called in all cases
|
||||
(or should be).
|
||||
|
||||
* Plain HTTP handlers are virtually removed
|
||||
|
||||
You can use the `init/2` function to do the work of a plain HTTP
|
||||
handler. The behavior is defined in `cowboy_handler`.
|
||||
|
||||
* Loop handlers are now the `cowboy_loop` sub protocol
|
||||
|
||||
* Loop handlers now use the same return values as Websocket
|
||||
|
||||
* Behaviors have been moved into the module implementing them
|
||||
|
||||
That means `cowboy_loop`, `cowboy_rest` and `cowboy_websocket`.
|
||||
|
||||
* Change the format for constraints used by the router
|
||||
|
||||
* Remove the onrequest hook
|
||||
|
||||
Use a middleware instead.
|
||||
|
||||
* Remove the `error` return value from middlewares
|
||||
|
||||
* Remove the REST `known_content_type` callback
|
||||
|
||||
* Improve absolute URI support
|
||||
|
||||
* Fix two edge cases when the request-line is invalid
|
||||
|
||||
* Guide reorganization and partial rewrite
|
||||
|
||||
1.0.0
|
||||
-----
|
||||
|
||||
* Drop R15 support
|
||||
|
||||
* Update erlang.mk, Ranch and Cowlib to 1.0.0
|
||||
|
||||
* Complete the user guide and simplify the Getting started chapter
|
||||
|
||||
* Document the HTTP status codes Cowboy may send in the manual
|
||||
|
||||
* Provide installable man pages (see README)
|
||||
|
||||
* Support ad-hoc keep-alive for HTTP/1.0 clients
|
||||
|
||||
* Fix SPDY parsing error when many frames were received in one packet
|
||||
|
||||
* Reply with 400 instead of 422 in cowboy_rest
|
||||
|
||||
* Reply with 400 instead of 500 on header parsing crash
|
||||
|
||||
* Remove deprecated body reading interface (see 0.10.0 notes)
|
||||
|
||||
0.10.0
|
||||
------
|
||||
|
||||
* Update Ranch to 0.10 and Cowlib to 0.6.2
|
||||
|
||||
* Update the body reading API to allow controlling rate of transfer
|
||||
|
||||
The lack of this feature was causing various timeout issues
|
||||
in some environments.
|
||||
|
||||
The body/2 function now takes a Req and a list of options. The older
|
||||
interface can still be used until Cowboy 1.0.
|
||||
|
||||
The body_qs/2, part/2 and part_body/2 also accept this list of
|
||||
options, and pass it down to the body/2 call. The default options
|
||||
vary between the different functions.
|
||||
|
||||
The return value of the function has changed. Older code should work
|
||||
without modification but you should definitely still test it.
|
||||
|
||||
All functions appropriately decode transfer and content encoding.
|
||||
There is no need to have a special case for that anymore.
|
||||
|
||||
The body/1,2 function supports streaming, with the same interface
|
||||
as the part_body/1,2 function.
|
||||
|
||||
* Deprecate the cowboy_req:init_stream, stream_body and skip_body functions
|
||||
|
||||
They will be removed in Cowboy 1.0.
|
||||
|
||||
* Add support for multipart
|
||||
|
||||
The cowboy_req:part/1,2 and cowboy_req:part_body/1,2 can be
|
||||
used for reading a multipart body.
|
||||
|
||||
Documentation has been added.
|
||||
|
||||
The old undocumented multipart functions were removed.
|
||||
|
||||
* Allow the onresponse hook to override only status and headers
|
||||
|
||||
Previously it wasn't possible to override them without also
|
||||
overriding the body. The new return value is currently marked
|
||||
as experimental.
|
||||
|
||||
* Make loop handlers work with SPDY
|
||||
|
||||
* Fix a race condition with loop handlers and keepalive requests
|
||||
|
||||
* Fix parsing of accept-language header
|
||||
|
||||
* Fix parsing of authorization header with empty passwords
|
||||
|
||||
* Fix multiline headers handling
|
||||
|
||||
* Various optimizations
|
||||
|
||||
All code that is moved to cowlib is optimized at the same time
|
||||
and benchmarks get added for all functions.
|
||||
|
||||
The parsing of connection, content-length and transfer-encoding
|
||||
has been optimized.
|
||||
|
||||
Chunked transfer decoding has been optimized.
|
||||
|
||||
* Enable +warn_missing_spec by default and fix specs
|
||||
|
||||
* Remove the non-documented cowboy_client module; use gun instead
|
||||
|
||||
* Numerous documentation updates and tweaks
|
||||
|
||||
The guide now has a REST principles chapter and revised
|
||||
and completed Websocket chapters, alongside a new multipart chapter.
|
||||
|
||||
* Add a multipart file upload example
|
||||
|
||||
* Test suites are being reworked and greatly improved
|
||||
* Test Cowboy across all releases from R15B01 to 17.0, plus maint and master
|
||||
* The Autobahn test suite is now always ran (as long as it's installed)
|
||||
* Expected error reports are now silenced (but still logged)
|
||||
* Applications are now only started once from a ct hook
|
||||
|
||||
0.9.0
|
||||
-----
|
||||
|
||||
* Update Ranch to 0.9.0
|
||||
|
||||
* SPDY is no longer experimental and is documented
|
||||
|
||||
The SPDY development has been sponsored by the LeoFS project.
|
||||
|
||||
* Review, improve and document cowboy_static
|
||||
* Much simplified configuration
|
||||
* Etag generation is now enabled by default
|
||||
* Web mimetypes are now detected by default
|
||||
* Optionally a huge list of mimetypes can also be used
|
||||
* It not try to magically find the priv directory anymore, use ERL_LIBS
|
||||
|
||||
* Remove the pretty printing of errors
|
||||
|
||||
Cowboy will no longer print errors, it will instead let the process
|
||||
crash properly, so that links can work with Cowboy. Ranch will catch
|
||||
errors and print a one-liner containing all the error information
|
||||
instead.
|
||||
|
||||
* Trigger a human readable error when routes lack the starting slash
|
||||
|
||||
* Add websocket_compress metadata
|
||||
|
||||
* Fix parsing of hosts given as IPv6 addresses
|
||||
|
||||
* Fix the decoding of chunked bodies
|
||||
|
||||
* Fix handling of close, ping and pong Websocket replies
|
||||
|
||||
* Fix the x-webkit-deflate-frame Websocket extension
|
||||
|
||||
* Fix PUT behavior in cowboy_rest when creating a resource at the request URL
|
||||
|
||||
* Fix warnings with the reltool GUI
|
||||
|
||||
* Start moving code in a new dependency, cowlib
|
||||
|
||||
The code moved there is mostly parsing code and utility functions.
|
||||
Most of it was in the undocumented cowboy_http module before.
|
||||
|
||||
* Optimize cookie date building and query string building/parsing
|
||||
|
||||
* Great number of improvements and additions to the user guide
|
||||
|
||||
* Convert all examples to releases using the erlang.mk+relx combo
|
||||
|
||||
Some examples have also been fixed or slightly improved.
|
||||
The elixir example is now on a separate repository maintained
|
||||
independently. More examples in this language exist in that
|
||||
other repository.
|
||||
|
||||
0.8.6
|
||||
-----
|
||||
|
||||
* Make sure Cowboy compiles on R16B01
|
||||
|
||||
* Update Ranch to 0.8.4
|
||||
|
||||
* Add experimental support for the x-webkit-deflate-frame Websocket extension
|
||||
|
||||
This allows Cowboy to handle compressed Websocket frames,
|
||||
lowering the amount of data that needs to be sent over the
|
||||
socket.
|
||||
|
||||
The extension will only be used if compression was enabled
|
||||
using the `compress` protocol option.
|
||||
|
||||
* Add experimental SPDY support
|
||||
|
||||
SPDY is a new protocol implemented by most browsers. It is
|
||||
the basis for what will become HTTP/2.0.
|
||||
|
||||
To use SPDY, you need to call `start_spdy` where you would
|
||||
have used `start_https` before.
|
||||
|
||||
This protocol is still incomplete. It cannot accept request
|
||||
bodies yet, making most methods other than GET and HEAD
|
||||
not too useful at this point.
|
||||
|
||||
* Allow an empty method list in allowed_methods
|
||||
|
||||
* The charset parameter of content-types is now always lowercase
|
||||
|
||||
* Don't overwrite the stacktrace when a REST handler crashes
|
||||
|
||||
* Don't crash when the Cookie header is empty
|
||||
|
||||
* Don't crash on invalid Accept-Encoding header when replying
|
||||
|
||||
0.8.5
|
||||
-----
|
||||
|
||||
* Add the Cowboy Function Reference
|
||||
|
||||
Everything documented in the function reference is the API
|
||||
that will make it to Cowboy 1.0.
|
||||
|
||||
* Use erlang.mk
|
||||
|
||||
The project is of course still compatible with rebar
|
||||
and can be used as a dependency just fine.
|
||||
|
||||
* Update Ranch to 0.8.3
|
||||
|
||||
* Remove cowboy_req:fragment/1
|
||||
|
||||
No well-written client is sending the fragment with the URL.
|
||||
|
||||
* Add cowboy_req:set_resp_body_fun(chunked, Fun, Req)
|
||||
|
||||
* Improve various typespecs
|
||||
|
||||
* Change the return value of cowboy_req:version/1
|
||||
|
||||
We now have 'HTTP/1.1' instead of {1, 1} and 'HTTP/1.0'
|
||||
instead of {1, 0}.
|
||||
|
||||
* Change the return value of REST accept callbacks
|
||||
|
||||
The Path return value becomes {true, Path}.
|
||||
|
||||
* Change the return value of REST charsets_provided/2
|
||||
|
||||
It was incorrectly expecting a list of tuples instead of
|
||||
a list of charsets.
|
||||
|
||||
* Move various types to the cowboy module
|
||||
* cowboy_http:version() to cowboy:http_version()
|
||||
* cowboy_http:headers() to cowboy:http_headers()
|
||||
* cowboy_http:status() to cowboy:http_status()
|
||||
* cowboy_protocol:onrequest_fun() to cowboy:onrequest_fun()
|
||||
* cowboy_protocol:onresponse_fun() to cowboy:onresponse_fun()
|
||||
|
||||
* Add type cowboy_protocol:opts()
|
||||
|
||||
* Fix a REST bug with the OPTIONS method
|
||||
|
||||
* Fix a REST bug where iso-8859-1 would be incoditionally selected
|
||||
|
||||
0.8.4
|
||||
-----
|
||||
|
||||
* Cookie names are now back to being case sensitive
|
||||
|
||||
This should be more in line with what browsers do and what
|
||||
users would expect.
|
||||
|
||||
* REST is no longer experimental and is documented
|
||||
|
||||
* REST behavior fixed when used with the POST method
|
||||
|
||||
Removes process_post, post_is_create, create_path, created_path
|
||||
callbacks. It is up to the resource accept callback to decide
|
||||
what to do when the POST method is used. Depending on the return
|
||||
value Cowboy will determine if the resource was created or not.
|
||||
|
||||
* Removes the put_path meta value in REST
|
||||
|
||||
* Fix an issue in REST with the PATCH method
|
||||
|
||||
Content-types were not normalized as expected, preventing the
|
||||
use of the binary form for content-types.
|
||||
|
||||
* Add default operations for the OPTIONS method in REST
|
||||
|
||||
The default will be to set the Allow header in the response
|
||||
based on the return value from allowed_methods.
|
||||
|
||||
* Add default content_types_provided "text/html" maps to to_html
|
||||
|
||||
This allows non-HEAD/GET methods to work without defining
|
||||
the callback explicitly.
|
||||
|
||||
* Reject invalid content-types explicitly in REST
|
||||
|
||||
* Don't accept TRACE or CONNECT methods by default in REST
|
||||
|
||||
* Remove cowboy_req:peer_addr/1
|
||||
|
||||
Because each server's proxy situation differs, it is better
|
||||
that this function is implemented by the application directly.
|
||||
|
||||
The X-Forwarded-For header can now be parsed using
|
||||
cowboy_req:parse_header/2.
|
||||
|
||||
* Switch the arguments to cowboy_req:stream_body/2
|
||||
|
||||
They were in the wrong order compared to the rest of the module.
|
||||
|
||||
* Add parser for the Range header
|
||||
|
||||
* Do not crash if connection times out while sending a file using sendfile
|
||||
|
||||
* Ensure we can fetch the body in the info/3 function of loop handlers
|
||||
|
||||
* Update Ranch to 0.8.1
|
||||
|
||||
* Reorganize and optimize the test suites
|
||||
|
||||
0.8.3
|
||||
-----
|
||||
|
||||
* Remove init_stream/5, add stream_body/2
|
||||
|
||||
It's better to allow configuring the streamed chunk size on
|
||||
a per chunk basis. Also easier to use.
|
||||
|
||||
* Update Ranch to 0.8.0
|
||||
|
||||
Much faster. Also improved stability.
|
||||
|
||||
0.8.2
|
||||
-----
|
||||
|
||||
* Add error_hook and ssl_hello_world example
|
||||
|
||||
* Greatly improve the performance of body reading operations
|
||||
|
||||
The streamed chunk size is now configurable through the new
|
||||
function cowboy_req:init_stream/5.
|
||||
|
||||
* Add cowboy_req:body/2 and cowboy_req:body_qs/2
|
||||
|
||||
These functions take an additional argument indicating the
|
||||
maximum size of the body. They will return {error, badlength}
|
||||
if the size is too large, or {error, chunked} if the body
|
||||
was sent using the chunked Transfer-Encoding and its size
|
||||
cannot be determined.
|
||||
|
||||
The function body/1 is now an alias to body/2 with a maximum
|
||||
body size of 8MB. Likewise, the function body_qs/1 is an alias
|
||||
of body_qs/2 with a maximum body size of 16KB.
|
||||
|
||||
* Properly handle explicit identity Transfer-Encoding in body_length/1
|
||||
|
||||
* Small but noticeable performance improvement in the critical path
|
||||
|
||||
We stopped using binary:match/2 in favor of custom functions.
|
||||
This makes Cowboy 0.5ms faster per request.
|
||||
|
||||
* Prevent loop handlers from awakening after sending a response
|
||||
|
||||
* Optimize cowboy_static initialization code
|
||||
|
||||
* Make path checks in cowboy_static cross-platform
|
||||
|
||||
* Allow '*' for REST content types parameters in content_types_provided
|
||||
|
||||
* Fix cowboy_router types
|
||||
|
||||
* Update Ranch to 0.6.2; adds support for two new SSL options
|
||||
|
||||
* Improve documentation
|
||||
|
||||
0.8.1
|
||||
-----
|
||||
|
||||
* Add eventsource, web_server examples; improve rest_pastebin example
|
||||
|
||||
* Add cowboy:set_env/3 to more conveniently update the dispatch list
|
||||
|
||||
* Add cowboy_sub_protocol behaviour
|
||||
|
||||
* Fix cowboy_req:has_body/1 when Content-Length == 0
|
||||
|
||||
* Fix passing of state to websocket_terminate/3 on server close
|
||||
|
||||
* Fix compilation with +native
|
||||
|
||||
* Compile with more warnings enabled by default; fix warnings
|
||||
|
||||
* Set the socket in passive mode after the loop handler terminates
|
||||
|
||||
* Improve typespecs
|
||||
|
||||
0.8.0
|
||||
-----
|
||||
|
||||
* This release drops R14 compatibility
|
||||
|
||||
Behaviours now use the -callback attribute which is supported only
|
||||
since R15B.
|
||||
|
||||
* Add a user guide
|
||||
|
||||
* Add or update many examples
|
||||
|
||||
Add basic_auth, compress_response, cookie, elixir_hello_world,
|
||||
markdown_middleware, rest_pastebin, rest_stream_response
|
||||
and websocket examples.
|
||||
|
||||
Rename the static example to static_world for clarity.
|
||||
|
||||
* Add CONTRIBUTING.md file
|
||||
|
||||
* Use Ranch 0.6.1 for connection handling
|
||||
|
||||
To start listeners you can now use cowboy:start_http/4 for HTTP,
|
||||
and cowboy:start_https/4 for HTTPS. The proper transport and
|
||||
protocol modules will be used.
|
||||
|
||||
* Add protection against slowloris vulnerability
|
||||
|
||||
This protection is always enabled and has no impact on the performance
|
||||
of the system.
|
||||
|
||||
* Add a better routing syntax
|
||||
|
||||
* If a binding is used twice in routing, values must now be identical
|
||||
|
||||
* Add support for a configurable chain of middlewares
|
||||
|
||||
Routing and handling are now two separate middlewares that can be
|
||||
replaced as needed.
|
||||
|
||||
* Fix application dependencies
|
||||
|
||||
The crypto application must be started before Cowboy.
|
||||
|
||||
The inets application is no longer needed. A few functions from
|
||||
that application were used by mistake in the REST code.
|
||||
|
||||
* Shorten the name of many modules
|
||||
* cowboy_http_protocol becomes cowboy_protocol
|
||||
* cowboy_http_req becomes cowboy_req
|
||||
* cowboy_http_rest becomes cowboy_rest
|
||||
* cowboy_http_static becomes cowboy_static
|
||||
* cowboy_http_websocket becomes cowboy_websocket
|
||||
|
||||
* Introduce the cowboy_req:req() opaque type
|
||||
|
||||
The include/http.hrl file was removed. Users are expected to use
|
||||
the cowboy_req API to access or modify the Req object.
|
||||
|
||||
This required a lot of changes so cleanup and optimizations were
|
||||
performed where possible.
|
||||
|
||||
* Add many cowboy_req functions
|
||||
* cowboy_req:delete_resp_header/2 deletes a previously set resp header
|
||||
* cowboy_req:set_meta/3 sets metadata in the Req object
|
||||
* cowboy_req:to_list/1 converts the Req object to a list of key/values
|
||||
* cowboy_req:fragment/1 returns the request URL fragment
|
||||
* cowboy_req:host_url/1 returns the request URL without the path or qs
|
||||
* cowboy_req:url/1 returns the full request URL
|
||||
* cowboy_req:set_resp_body_fun/2 for body streaming with no known length
|
||||
|
||||
* Improve the body streaming interface in cowboy_req
|
||||
|
||||
The function now receives the Transport and Socket directly as arguments.
|
||||
|
||||
* Rename or drop many cowboy_req functions
|
||||
* cowboy_req:raw_host/1 becomes cowboy_req:host/1, old function dropped
|
||||
* cowboy_req:raw_path/1 becomes cowboy_req:path/1, old function dropped
|
||||
* cowboy_req:raw_qs/1 becomes cowboy_req:qs/1
|
||||
* Remove cowboy_req:body/2
|
||||
* Remove cowboy_req:transport/1
|
||||
|
||||
* Change the signature of many cowboy_req functions
|
||||
* parse_header now returns {ok, any(), Req} instead of {any(), Req}
|
||||
* body_qs now returns {ok, QsVals, Req} instead of {QsVals, Req}
|
||||
* multipart_data now returns {headers, Headers, Req} instead of
|
||||
{{headers, Headers}, Req} and {body, Body, Req} instead of
|
||||
{{body, Body}, Req}
|
||||
* set_resp_* functions now return Req instead of {ok, Req}
|
||||
* has_body now returns boolean()
|
||||
|
||||
* Rewrote cookie code
|
||||
|
||||
In short we now do the same thing as PHP when setting cookies. This
|
||||
allows us to be fairly confident that our code will work on the vast
|
||||
majority of browsers.
|
||||
|
||||
* Fix consistency issues caused by erlang:decode_packet/3
|
||||
* The method is now always a case sensitive binary string
|
||||
* Note that standard method names are uppercase (e.g. <<"GET">>)
|
||||
* Header names are now always lowercase binary string
|
||||
|
||||
* The max_line_length cowboy_protocol option was replaced by 3 new options:
|
||||
* max_request_line_length, defaults to 4096 bytes
|
||||
* max_header_name_length, defaults to 64 bytes
|
||||
* max_header_value_length, defaults to 4096 bytes
|
||||
|
||||
* Add max_headers option, limiting the number of headers; defaults to 100
|
||||
|
||||
* The max_keepalive option now defaults to 100 instead of infinity
|
||||
|
||||
* Change terminate/2 to terminate/3 in the HTTP handler interface
|
||||
|
||||
* Enhance the loop handler API
|
||||
* Connection close is now better detected
|
||||
* Fix an internal message leak
|
||||
|
||||
* Enhance the Websocket API
|
||||
* Change a websocket error from {error, protocol} to {error, badframe}
|
||||
* Allow websocket handlers to reply more than one frame
|
||||
* Check for errors when calling Transport:send/2 to avoid crashes
|
||||
* Add close, {close, Payload}, {close, StatusCode, Payload},
|
||||
ping, pong frame types for replies
|
||||
* Ensure websocket_terminate is always called
|
||||
* Improve timeout handling
|
||||
* Remove support for the old hixie76 protocol
|
||||
* Add parsing support for Sec-Websocket-Protocol
|
||||
* Check for UTF-8 correctness of text frames
|
||||
* Perform unmasking and UTF-8 validation on the fly
|
||||
* Reject clients that send unmasked frames
|
||||
* Add cowboy_websocket:close_code/0 type
|
||||
|
||||
* Enhance the REST API
|
||||
* Fix charset handling
|
||||
* Add PATCH support
|
||||
* Add created_path callback, used if create_path was not defined
|
||||
* Make sure rest_terminate is always called
|
||||
|
||||
* Improved HTTP standard compatibility
|
||||
* Revised status code used in responses
|
||||
* Implement authorization header parsing
|
||||
* Add opt-in automatic response body compression
|
||||
|
||||
* Improve lager compatibility
|
||||
|
||||
We format errors in a special way so that lager can recognize Cowboy
|
||||
errors and put them on a single line.
|
||||
|
||||
* Remove the urldecode cowboy_protocol option
|
||||
|
||||
* Add cowboy_protocol:onrequest_fun/0 and :onresponse_fun/0 types
|
||||
|
||||
* Add the body data to onresponse_fun/0 callback
|
||||
|
||||
* Avoid a duplicate HTTP reply in cowboy_websocket:upgrade_error/1
|
||||
|
||||
* Fix use of the Vary header, was named Variances in the previous code
|
||||
|
||||
* Improve returned status code for HTTP and REST
|
||||
|
||||
* Fix charsets_provided return value
|
||||
|
||||
* Allow passing {M, F} for the mimetype function to cowboy_static
|
||||
|
||||
* Can now upgrade protocols with {upgrade, protocol, P, Req, Opts}
|
||||
|
||||
* Cowboy now only expects universal time, never local time
|
||||
|
||||
* Do not try skipping the body if the connection is to be closed
|
||||
|
||||
* Add cowboy_bstr:to_upper/1, cowboy_bstr:capitalize_token/1
|
||||
|
||||
* Many, many optimizations for the most critical code path
|
||||
|
||||
0.6.1
|
||||
-----
|
||||
|
||||
* Add hello_world, rest_hello_world, chunked_hello_world,
|
||||
echo_get, echo_post and static examples.
|
||||
|
||||
* Add support for the "Expect: 100-continue" header.
|
||||
|
||||
* Keep the original 'Host' header value instead of modifying it.
|
||||
|
||||
* Fix use of parsed headers cache.
|
||||
|
||||
* REST: fix the matching of charsets.
|
||||
|
||||
* REST: allow <<"type/subtype">> format for content_types_accepted.
|
||||
|
||||
* Improve typespecs.
|
||||
|
||||
0.6.0
|
||||
-----
|
||||
|
||||
* Add multipart support
|
||||
|
||||
* Add chunked transfer decoding support
|
||||
|
||||
Done by reworking the body reading API. Now all the body
|
||||
reading goes through the cowboy_http_req:stream_body/1
|
||||
function. This function takes care of handling both the
|
||||
Transfer-Encoding and the Content-Encoding, returning
|
||||
properly decoded data ready for consumption.
|
||||
|
||||
* Add fragmented websocket messages support
|
||||
|
||||
Properly tested by the addition of the Autobahn websocket
|
||||
test suite to our toolbox. All tests pass except a few
|
||||
related to UTF-8 handling, as Cowboy does no checks on that
|
||||
end at this point.
|
||||
|
||||
* Add 'onrequest' and 'onresponse' hooks
|
||||
|
||||
The first can be used for all the special cases you may have
|
||||
that can't be dealt with otherwise. It's also pretty good for
|
||||
writing access logs or rewriting URLs.
|
||||
|
||||
The second can be used for logging errors or replacing error
|
||||
pages, amongst others.
|
||||
|
||||
* Add cowboy:get_protocol_options/1 and cowboy:set_protocol_options/2
|
||||
|
||||
These functions allow for retrieving a listener's protocol options,
|
||||
and for modifying them while the listener is running. This is
|
||||
most useful to upgrade the dispatch list. The upgrade applies
|
||||
to all the future connections.
|
||||
|
||||
* Add the sockname/1 function to TCP and SSL transports
|
||||
|
||||
* Improve SSL transport support
|
||||
|
||||
Add support for specifying the ciphers. Add CA support. Make
|
||||
specifying the password optional.
|
||||
|
||||
* Add new HTTP status codes from RFC 6585
|
||||
|
||||
* Add a 'file' option to cowboy_http_static
|
||||
|
||||
This allows for mapping /folder/ paths to a /folder/index.html file.
|
||||
|
||||
* Add the '*' catch all Content-Type for REST
|
||||
|
||||
* Add {halt, Req, State} as a possible return value for REST
|
||||
|
||||
* Add absolute URI support for requests
|
||||
|
||||
* Add cowboy_http:x_www_form_urlencoded/2
|
||||
|
||||
* Various REST bug fixes
|
||||
|
||||
* Do not send chunked replies for HTTP/1.0 connections
|
||||
|
||||
* Fix a DST bug in the cookies code
|
||||
|
||||
* Fix a bug with setting cookie values containing slashes
|
||||
|
||||
* Fix a small timer leak when using loop/websocket timeouts
|
||||
|
||||
* Make charset and media type parsing more relaxed
|
||||
|
||||
This is to accomodate some widely used broken clients.
|
||||
|
||||
* Make error messages more readable
|
||||
|
||||
* Fix and improve type specifications
|
||||
|
||||
* Fix a bug preventing documentation from being generated
|
||||
|
||||
* Small improvements to the documentation
|
||||
|
||||
* Rework the HTTP test suite
|
||||
|
||||
The suite now uses an integrated Cowboy HTTP client. The client
|
||||
is currently experimental and shouldn't be used.
|
||||
|
||||
* Add many many tests.
|
||||
|
||||
0.4.0
|
||||
-----
|
||||
|
||||
* Set the cowboy_listener process priority to high
|
||||
|
||||
As it is the central process used by all incoming requests
|
||||
we need to set its priority to high to avoid timeouts that
|
||||
would happen otherwise when reaching a huge number of
|
||||
concurrent requests.
|
||||
|
||||
* Add cowboy:child_spec/6 for embedding in other applications
|
||||
|
||||
* Add cowboy_http_rest, an experimental REST protocol support
|
||||
|
||||
Based on the Webmachine diagram and documentation. It is a
|
||||
new implementation, not a port, therefore a few changes have
|
||||
been made. However all the callback names are the same and
|
||||
should behave similarly to Webmachine.
|
||||
|
||||
There is currently no documentation other than the Webmachine
|
||||
resource documentation and the comments found in cowboy_http_rest,
|
||||
which itself should be fairly easy to read and understand.
|
||||
|
||||
* Add cowboy_http_static, an experimental static file handler
|
||||
|
||||
Makes use of the aforementioned REST protocol support to
|
||||
deliver files with proper content type and cache headers.
|
||||
|
||||
Note that this uses the new file:sendfile support when
|
||||
appropriate, which currently requires the VM to be started
|
||||
with the +A option defined, else errors may randomly appear.
|
||||
|
||||
* Add cowboy_bstr module for binary strings related functions
|
||||
|
||||
* Add cowboy_http module for HTTP parsing functions
|
||||
|
||||
This module so far contains various functions for HTTP header
|
||||
parsing along with URL encoding and decoding.
|
||||
|
||||
* Remove quoted from the default dependencies
|
||||
|
||||
This should make Cowboy much easier to compile and use by default.
|
||||
It is of course still possible to use quoted as your URL decoding
|
||||
library in Cowboy thanks to the newly added urldecode option.
|
||||
|
||||
* Fix supervisor spec for non dynamic modules to allow upgrades to complete
|
||||
|
||||
* Add cowboy:accept_ack/1 for a cleaner handling of the shoot message
|
||||
|
||||
Before, when the listener accepted a connection, the newly created
|
||||
process was waiting for a message containing the atom 'shoot' before
|
||||
proceeding. This has been replaced by the cowboy:accept_ack/1 function.
|
||||
|
||||
This function should be used where 'shoot' was received because the
|
||||
contents of the message have changed (and could change again in the
|
||||
distant future).
|
||||
|
||||
* Update binary parsing expressions to avoid hype crashes
|
||||
|
||||
More specifically, /bits was replaced by /binary.
|
||||
|
||||
* Rename the type cowboy_dispatcher:path_tokens/0 to tokens/0
|
||||
|
||||
* Remove the cowboy_clock:date/0, time/0 and datetime/0 types
|
||||
|
||||
The calendar module exports those same types properly since R14B04.
|
||||
|
||||
* Add cacertfile configuration option to cowboy_ssl_transport
|
||||
|
||||
* Add cowboy_protocol behaviour
|
||||
|
||||
* Remove -Wbehaviours dialyzer option unavailable in R15B
|
||||
|
||||
* Many tests and specs improvements
|
||||
|
||||
### cowboy_http_req
|
||||
|
||||
* Fix a crash when reading the request body
|
||||
|
||||
* Add parse_header/2 and parse_header/3
|
||||
|
||||
The following headers can now be semantically parsed: Connection, Accept,
|
||||
Accept-Charset, Accept-Encoding, Accept-Language, Content-Length,
|
||||
Content-Type, If-Match, If-None-Match, If-Modified-Since,
|
||||
If-Unmodified-Since, Upgrade
|
||||
|
||||
* Add set_resp_header/3, set_resp_cookie/4 and set_resp_body/2
|
||||
|
||||
These functions allow handlers to set response headers and body
|
||||
without having to reply directly.
|
||||
|
||||
* Add set_resp_body_fun/3
|
||||
|
||||
This function allows handlers to stream the body of the response
|
||||
using the given fun. The size of the response must be known beforehand.
|
||||
|
||||
* Add transport/1 to obtain the transport and socket for the request
|
||||
|
||||
This allows handlers to have low-level socket access in those cases
|
||||
where they do need it, like when streaming a response body with
|
||||
set_resp_body_fun/3.
|
||||
|
||||
* Add peer_addr/1
|
||||
|
||||
This function tries to guess the real peer IP based on the HTTP
|
||||
headers received.
|
||||
|
||||
* Add meta/2 and meta/3 to save useful protocol information
|
||||
|
||||
Currently used to save the Websocket protocol version currently used,
|
||||
and to save request information in the REST protocol handler.
|
||||
|
||||
* Add reply/2 and reply/3 aliases to reply/4
|
||||
|
||||
* Add upgrade_reply/3 for protocol upgrades
|
||||
|
||||
### cowboy_http_protocol
|
||||
|
||||
* Add the {urldecode, fun urldecode/2} option
|
||||
|
||||
Added when quoted was removed from the default build. Can be used to
|
||||
tell Cowboy to use quoted or any other URL decoding routine.
|
||||
|
||||
* Add the max_keepalive option
|
||||
|
||||
* Add the max_line_length option
|
||||
|
||||
* Allow HTTP handlers to stop during init/3
|
||||
|
||||
To do so they can return {shutdown, Req, State}.
|
||||
|
||||
* Add loops support in HTTP handlers for proper long-polling support
|
||||
|
||||
A loop can be entered by returning either of {loop, Req, State},
|
||||
{loop, Req, State, hibernate}, {loop, Req, State, Timeout} or
|
||||
{loop, Req, State, Timeout, hibernate} from init/3.
|
||||
|
||||
Loops are useful when we cannot reply immediately and instead
|
||||
are waiting for an Erlang message to be able to complete the request,
|
||||
as would typically be done for long-polling.
|
||||
|
||||
Loop support in the protocol means that timeouts and hibernating
|
||||
are well tested and handled so you can use those options without
|
||||
worrying. It is recommended to set the timeout option.
|
||||
|
||||
When a loop is started, handle/2 will never be called so it does
|
||||
not need to be defined. When the request process receives an Erlang
|
||||
message, it will call the info/3 function with the message as the
|
||||
first argument.
|
||||
|
||||
Like in OTP, you do need to set timeout and hibernate again when
|
||||
returning from info/3 to enable them until the next call.
|
||||
|
||||
* Fix the sending of 500 errors when handlers crash
|
||||
|
||||
Now we send an error response when no response has been sent,
|
||||
and do nothing more than close the connection if anything
|
||||
did get sent.
|
||||
|
||||
* Fix a crash when the server is sent HTTP responses
|
||||
|
||||
* Fix HTTP timeouts handling when the Request-Line wasn't received
|
||||
|
||||
* Fix the handling of the max number of empty lines between requests
|
||||
|
||||
* Fix the handling of HEAD requests
|
||||
|
||||
* Fix HTTP/1.0 Host header handling
|
||||
|
||||
* Reply status 400 if we receive an unexpected value or error for headers
|
||||
|
||||
* Properly close when the application sends "Connection: close" header
|
||||
|
||||
* Close HTTP connections on all errors
|
||||
|
||||
* Improve the error message for HTTP handlers
|
||||
|
||||
### cowboy_http_websocket
|
||||
|
||||
* Add websocket support for all versions up to RFC 6455
|
||||
|
||||
Support isn't perfect yet according to the specifications, but
|
||||
is working against all currently known client implementations.
|
||||
|
||||
* Allow websocket_init/3 to return with the hibernate option set
|
||||
|
||||
* Add {shutdown, Req} return value to websocket_init/3 to fail an upgrade
|
||||
|
||||
* Fix websocket timeout handling
|
||||
|
||||
* Fix error messages: wrong callback name was reported on error
|
||||
|
||||
* Fix byte-by-byte websocket handling
|
||||
|
||||
* Fix an issue when using hixie-76 with certain proxies
|
||||
|
||||
* Fix a crash in the hixie-76 handshake
|
||||
|
||||
* Fix the handshake when SSL is used on port 443
|
||||
|
||||
* Fix a crash in the handshake when cowboy_http_req:compact/1 is used
|
||||
|
||||
* Fix handshake when a query string is present
|
||||
|
||||
* Fix a crash when the Upgrade header contains more than one token
|
||||
|
||||
0.2.0
|
||||
-----
|
||||
|
||||
* Initial release.
|
Loading…
Add table
Add a link
Reference in a new issue