From 804f16c356bc5528e89faf32d08b987a327ed7ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Hoguin?= Date: Wed, 19 Jul 2017 00:57:09 +0200 Subject: Remove CHANGELOG Please consult the appendixes in the user guide. --- CHANGELOG.md | 959 ----------------------------------------------------------- 1 file changed, 959 deletions(-) delete mode 100644 CHANGELOG.md 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. -- cgit v1.2.3