aboutsummaryrefslogtreecommitdiffstats
path: root/CHANGELOG.md
diff options
context:
space:
mode:
authorLoïc Hoguin <[email protected]>2017-07-19 00:57:09 +0200
committerLoïc Hoguin <[email protected]>2017-07-19 00:57:09 +0200
commit804f16c356bc5528e89faf32d08b987a327ed7ba (patch)
tree6aee4eafee5f35b1e6aa89bb29748b0aad713ca7 /CHANGELOG.md
parent49d13ece19d2502f74e8e68f4b2ac7f8f45a7680 (diff)
downloadcowboy-804f16c356bc5528e89faf32d08b987a327ed7ba.tar.gz
cowboy-804f16c356bc5528e89faf32d08b987a327ed7ba.tar.bz2
cowboy-804f16c356bc5528e89faf32d08b987a327ed7ba.zip
Remove CHANGELOG
Please consult the appendixes in the user guide.
Diffstat (limited to 'CHANGELOG.md')
-rw-r--r--CHANGELOG.md959
1 files changed, 0 insertions, 959 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
deleted file mode 100644
index a29963a..0000000
--- a/CHANGELOG.md
+++ /dev/null
@@ -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.