summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLoïc Hoguin <[email protected]>2017-07-19 14:06:42 +0200
committerLoïc Hoguin <[email protected]>2017-07-19 14:06:42 +0200
commitc41928fd607d35521a2b8de74e23529142841663 (patch)
tree3d590aa9cce12d102ba5702176ec1c720ddbad20
parente5c6ca9243fa213aa2a0b0d1395c7384549a06c9 (diff)
downloadninenines.eu-c41928fd607d35521a2b8de74e23529142841663.tar.gz
ninenines.eu-c41928fd607d35521a2b8de74e23529142841663.tar.bz2
ninenines.eu-c41928fd607d35521a2b8de74e23529142841663.zip
Update docs
-rw-r--r--docs/en/cowboy/2.0/guide/broken_clients.asciidoc27
-rw-r--r--docs/en/cowboy/2.0/guide/broken_clients/index.html18
-rw-r--r--docs/en/cowboy/2.0/guide/index.html44
-rw-r--r--docs/en/cowboy/2.0/guide/migrating_from_1.0.asciidoc207
-rw-r--r--docs/en/cowboy/2.0/guide/migrating_from_1.0/index.html530
-rw-r--r--docs/en/cowboy/2.0/guide/specs.asciidoc2
-rw-r--r--docs/en/cowboy/2.0/guide/specs/index.html9
-rw-r--r--docs/en/cowboy/2.0/guide/sub_protocols/index.html4
-rw-r--r--docs/en/cowboy/2.0/manual/cowboy/index.html11
-rw-r--r--docs/index.xml55
-rw-r--r--donate/index.html2
-rw-r--r--index.html2
-rw-r--r--services/index.html2
-rw-r--r--sitemap.xml4
14 files changed, 780 insertions, 137 deletions
diff --git a/docs/en/cowboy/2.0/guide/broken_clients.asciidoc b/docs/en/cowboy/2.0/guide/broken_clients.asciidoc
index 17bb892f..1d1a51a9 100644
--- a/docs/en/cowboy/2.0/guide/broken_clients.asciidoc
+++ b/docs/en/cowboy/2.0/guide/broken_clients.asciidoc
@@ -46,16 +46,17 @@ implementations. There is no easy solution for this other than
forking the project and editing the `cowboy_protocol` file
directly.
-=== Chunked transfer-encoding
-
-Sometimes an HTTP client advertises itself as HTTP/1.1 but
-does not support chunked transfer-encoding. This is invalid
-behavior, as HTTP/1.1 clients are required to support it.
-
-A simple workaround exists in these cases. By changing the
-Req object response state to `waiting_stream`, Cowboy will
-understand that it must use the identity transfer-encoding
-when replying, just like if it was an HTTP/1.0 client.
-
-[source,erlang]
-Req2 = cowboy_req:set(resp_state, waiting_stream).
+// @todo This currently has no equivalent in Cowboy 2.0.
+// === Chunked transfer-encoding
+//
+// Sometimes an HTTP client advertises itself as HTTP/1.1 but
+// does not support chunked transfer-encoding. This is invalid
+// behavior, as HTTP/1.1 clients are required to support it.
+//
+// A simple workaround exists in these cases. By changing the
+// Req object response state to `waiting_stream`, Cowboy will
+// understand that it must use the identity transfer-encoding
+// when replying, just like if it was an HTTP/1.0 client.
+//
+// [source,erlang]
+// Req2 = cowboy_req:set(resp_state, waiting_stream).
diff --git a/docs/en/cowboy/2.0/guide/broken_clients/index.html b/docs/en/cowboy/2.0/guide/broken_clients/index.html
index e05f85f5..41e8d59f 100644
--- a/docs/en/cowboy/2.0/guide/broken_clients/index.html
+++ b/docs/en/cowboy/2.0/guide/broken_clients/index.html
@@ -112,24 +112,6 @@ forking the project and editing the <code>cowboy_protocol</code> file
directly.</p></div>
</div>
</div>
-<div class="sect1">
-<h2 id="_chunked_transfer_encoding">Chunked transfer-encoding</h2>
-<div class="sectionbody">
-<div class="paragraph"><p>Sometimes an HTTP client advertises itself as HTTP/1.1 but
-does not support chunked transfer-encoding. This is invalid
-behavior, as HTTP/1.1 clients are required to support it.</p></div>
-<div class="paragraph"><p>A simple workaround exists in these cases. By changing the
-Req object response state to <code>waiting_stream</code>, Cowboy will
-understand that it must use the identity transfer-encoding
-when replying, just like if it was an HTTP/1.0 client.</p></div>
-<div class="listingblock">
-<div class="content"><!-- Generator: GNU source-highlight 3.1.8
-by Lorenzo Bettini
-http://www.lorenzobettini.it
-http://www.gnu.org/software/src-highlite -->
-<pre><tt><span style="color: #009900">Req2</span> <span style="color: #990000">=</span> <span style="font-weight: bold"><span style="color: #000000">cowboy_req:set</span></span>(<span style="color: #FF6600">resp_state</span>, <span style="color: #FF6600">waiting_stream</span>)<span style="color: #990000">.</span></tt></pre></div></div>
-</div>
-</div>
diff --git a/docs/en/cowboy/2.0/guide/index.html b/docs/en/cowboy/2.0/guide/index.html
index 7118db7b..ad2346ca 100644
--- a/docs/en/cowboy/2.0/guide/index.html
+++ b/docs/en/cowboy/2.0/guide/index.html
@@ -253,50 +253,6 @@
<div class="sect1">
<h2 id="_additional_information">Additional information</h2>
<div class="sectionbody">
-<div class="ulist"><ul>
-<li>
-<p>
-<a href="specs/">HTTP and other specifications</a>
-</p>
-</li>
-</ul></div>
-</div>
-</div>
-<div class="sect1">
-<h2 id="_deprecated_chapters">Deprecated chapters</h2>
-<div class="sectionbody">
-</div>
-</div>
-<div class="sect1">
-<h2 id="_about_the_deprecated_chapters">About the deprecated chapters</h2>
-<div class="sectionbody">
-<div class="paragraph"><p>The following chapters were relevant in Cowboy 1.0. They have
-not been updated for Cowboy 2.0 yet. The information in these
-chapters may or may not be useful.</p></div>
-<div class="ulist"><ul>
-<li>
-<p>
-<a href="architecture/">Architecture</a>
-</p>
-</li>
-<li>
-<p>
-<a href="broken_clients/">Dealing with broken clients</a>
-</p>
-</li>
-<li>
-<p>
-<a href="hooks/">Hooks</a>
-</p>
-</li>
-<li>
-<p>
-<a href="overview/">Overview</a>
-</p>
-</li>
-</ul></div>
-</div>
-</div>
diff --git a/docs/en/cowboy/2.0/guide/migrating_from_1.0.asciidoc b/docs/en/cowboy/2.0/guide/migrating_from_1.0.asciidoc
new file mode 100644
index 00000000..e9663788
--- /dev/null
+++ b/docs/en/cowboy/2.0/guide/migrating_from_1.0.asciidoc
@@ -0,0 +1,207 @@
+[appendix]
+== Migrating from Cowboy 1.0 to 2.0
+
+A lot has changed between Cowboy 1.0 and 2.0. The `cowboy_req`
+interface in particular has seen a massive revamp. Hooks are
+gone, their functionality can now be achieved via stream
+handlers.
+
+The documentation has seen great work, in particular the
+manual. Each module and each function now has its own dedicated
+manual page with full details and examples.
+
+=== Compatibility
+
+Compatibility with Erlang/OTP R16, 17 and 18 has been dropped.
+Erlang/OTP 19.0 or above is required. It is non-trivial to
+make Cowboy 2.0 work with older Erlang/OTP versions.
+
+Cowboy 2.0 is not compatible with Cowlib versions older than
+2.0. It should be compatible with Ranch 1.0 or above, however
+it has not been tested with Ranch versions older than 1.4.
+
+Cowboy 2.0 is tested on Arch Linux, Ubuntu, FreeBSD, Windows
+and OSX. It is tested with every point release (latest patch
+release) and also with HiPE on the most recent release.
+
+Cowboy 2.0 now comes with Erlang.mk templates.
+
+=== Features added
+
+* The HTTP/2 protocol is now supported.
+
+* Cowboy no longer uses only one process per connection.
+ It now uses one process per connection plus one process
+ per request by default. This is necessary for HTTP/2.
+ There might be a slight drop in performance for HTTP/1.1
+ connections due to this change.
+
+* Cowboy internals have largely been reworked in order to
+ support HTTP/2. This opened the way to stream handlers,
+ which are a chain of modules that are called whenever
+ something happens relating to a request/response.
+
+* The `cowboy_stream_h` stream handler has been added.
+ It provides most of Cowboy's default behavior.
+
+* The `cowboy_compress_h` stream handler has been added.
+ It compresses responses when possible. It's worth noting
+ that it compresses in more cases than Cowboy 1.0 ever did.
+
+* Because of the many changes in the internals of Cowboy,
+ many options have been added or modified. Of note is that
+ the Websocket options are now given per handler rather
+ than for the entire listener.
+
+* Websocket permessage-deflate compression is now supported
+ via the `websocket_compress` option.
+
+* Static file handlers will now correctly find files found
+ in '.ez' archives.
+
+* Constraints have been generalized and are now used not only
+ in the router but also in some `cowboy_req` functions. Their
+ interface has also been modified to allow for reverse
+ operations and formatting of errors.
+
+=== Features removed
+
+* SPDY support has been removed. Use HTTP/2 instead.
+
+* Hooks have been removed. Use xref:streams[stream handlers] instead.
+
+* The undocumented `waiting_stream` hack has been removed.
+ It allowed disabling chunked transfer-encoding for HTTP/1.1.
+ It has no equivalent in Cowboy 2.0. Open a ticket if necessary.
+
+* Sub protocols still exist, but their interface has largely changed
+ and they are no longer documented for the time being.
+
+=== Changed behaviors
+
+* The handler behaviors have been renamed and are now `cowboy_handler`,
+ `cowboy_loop`, `cowboy_rest` and `cowboy_websocket`.
+
+* Plain HTTP, loop, REST and Websocket handlers have had their
+ init and terminate callbacks unified. They now all use the
+ `init/2` and `terminate/3` callbacks. The latter is now optional.
+ The terminate reason has now been documented for all handlers.
+
+* The tuple returned to switch to a different handler type has
+ changed. It now takes the form `{Module, Req, State}` or
+ `{Module, Req, State, Opts}`, where `Opts` is a map of options
+ to configure the handler. The timeout and hibernate options
+ must now be specified using this map, where applicable.
+
+* All behaviors that used to accept `halt` or `shutdown` tuples
+ as a return value no longer do so. The return value is now
+ a `stop` tuple, consistent across Cowboy.
+
+* Middlewares can no longer return an `error` tuple. They have
+ to send the response and return a `stop` tuple instead.
+
+* The `known_content_type` REST handler callback has been removed
+ as it was found unnecessary.
+
+* Websocket handlers have both the normal `init/2` and
+ an optional `websocket_init/1` function. The reason for
+ that exception is that the `websocket_*` callbacks execute
+ in a separate process from the `init/2` callback, and it
+ was therefore not obvious how timers or monitors should
+ be setup properly. They are effectively initializing the
+ handler before and after the HTTP/1.1 upgrade.
+
+* Websocket handlers can now send frames directly from
+ `websocket_init/1`. The frames will be sent immediately
+ after the handshake.
+
+* Websocket handler callbacks no longer receive the Req
+ argument. The `init/2` callback still receives it and
+ can be used to extract relevant information. The `terminate/3`
+ callback, if implemented, may still receive the Req
+ (see next bullet point).
+
+* Websocket handlers have a new `req_filter` option that
+ can be used to customize how much information should be
+ discarded from the Req object after the handshake. Note
+ that the Req object is only available in `terminate/3`
+ past that point.
+
+* Websocket handlers have their timeout default changed
+ from infinity to 60 seconds.
+
+=== New functions
+
+* The `cowboy_req:scheme/1` function has been added.
+
+* The `cowboy_req:uri/1,2` function has been added, replacing the
+ less powerful functions `cowboy_req:url/1` and `cowboy_req:host_url/1`.
+
+* The functions `cowboy_req:match_qs/2` and `cowboy_req:match_cookies/2`
+ allow matching query string and cookies against constraints.
+
+* The function `cowboy_req:set_resp_cookie/3` has been added to
+ complement `cowboy_req:set_resp_cookie/4`.
+
+* The functions `cowboy_req:resp_header/2,3` and `cowboy_req:resp_headers/1`
+ have been added. They can be used to retrieve response headers
+ that were previously set.
+
+* The function `cowboy_req:set_resp_headers/2` has been added. It
+ allows setting many response headers at once.
+
+* The functions `cowboy_req:push/3,4` can be used to push resources
+ for protocols that support it (by default only HTTP/2).
+
+=== Changed functions
+
+* The `cowboy:start_http/4` function was renamed to `cowboy:start_clear/3`.
+
+* The `cowboy:start_https/4` function was renamed to `cowboy:start_tls/3`.
+
+* Most, if not all, functions in the `cowboy_req` module have been modified.
+ Please consult the changelog of each individual functions. The changes
+ are mainly about simplifying and clarifying the interface. The Req is no
+ longer returned when not necessary, maps are used wherever possible,
+ and some functions have been renamed.
+
+* The position of the `Opts` argument for `cowboy_req:set_resp_cookie/4`
+ has changed to improve consistency. It is now the last argument.
+
+=== Removed functions
+
+* The functions `cowboy_req:url/1` and `cowboy_req:host_url/1` have been
+ removed in favor of the new function `cowboy_req:uri/1,2`.
+
+* The functions `cowboy_req:meta/2,3` and `cowboy_req:set_meta/3` have
+ been removed. The Req object is now a public map, therefore they became
+ unnecessary.
+
+* The functions `cowboy_req:set_resp_body_fun/2,3` have been removed.
+ For sending files, the function `cowboy_req:set_resp_body/2` can now
+ take a sendfile tuple.
+
+* Remove many undocumented functions from `cowboy_req`, including the
+ functions `cowboy_req:get/2` and `cowboy_req:set/3`.
+
+=== Other changes
+
+* The correct percent-decoding algorithm is now used for path elements
+ during routing. It will no longer decode `+` characters.
+
+* The router will now properly handle path segments `.` and `..`.
+
+* Routing behavior has changed for URIs containing latin1 characters.
+ They are no longer allowed. URIs are expected to be in UTF-8 once
+ they are percent-decoded.
+
+* Etag comparison in REST handlers has been fixed. Some requests may
+ now fail when they succeeded in the past.
+
+* The `If-*-Since` headers are now ignored in REST handlers if
+ the corresponding `If*-Match` header exist. The former is
+ largely a backward compatible header and this shouldn't create
+ any issue. The new behavior follows the current RFCs more closely.
+
+* The static file handler has been improved to handle more special
+ characters on systems that accept them.
diff --git a/docs/en/cowboy/2.0/guide/migrating_from_1.0/index.html b/docs/en/cowboy/2.0/guide/migrating_from_1.0/index.html
new file mode 100644
index 00000000..8cfa2dae
--- /dev/null
+++ b/docs/en/cowboy/2.0/guide/migrating_from_1.0/index.html
@@ -0,0 +1,530 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <meta name="description" content="">
+ <meta name="author" content="Loïc Hoguin based on a design from (Soft10) Pol Cámara">
+
+ <meta name="generator" content="Hugo 0.17" />
+
+ <title>Nine Nines: Migrating from Cowboy 1.0 to 2.0</title>
+
+ <link href='https://fonts.googleapis.com/css?family=Open+Sans:400,700,400italic' rel='stylesheet' type='text/css'>
+ <link href="/css/99s.css?r=1" rel="stylesheet">
+
+ <link rel="shortcut icon" href="/img/ico/favicon.ico">
+ <link rel="apple-touch-icon-precomposed" sizes="114x114" href="/img/ico/apple-touch-icon-114.png">
+ <link rel="apple-touch-icon-precomposed" sizes="72x72" href="/img/ico/apple-touch-icon-72.png">
+ <link rel="apple-touch-icon-precomposed" href="/img/ico/apple-touch-icon-57.png">
+
+
+</head>
+
+
+<body class="">
+ <header id="page-head">
+ <div id="topbar" class="container">
+ <div class="row">
+ <div class="span2">
+ <h1 id="logo"><a href="/" title="99s">99s</a></h1>
+ </div>
+ <div class="span10">
+
+ <div id="side-header">
+ <nav>
+ <ul>
+ <li><a title="Hear my thoughts" href="/articles">Articles</a></li>
+ <li><a title="Watch my talks" href="/talks">Talks</a></li>
+ <li class="active"><a title="Read the docs" href="/docs">Documentation</a></li>
+ <li><a title="Request my services" href="/services">Consulting & Training</a></li>
+ </ul>
+ </nav>
+ <ul id="social">
+ <li>
+ <a href="https://github.com/ninenines" title="Check my Github repositories"><img src="/img/ico_github.png" data-hover="/img/ico_github_alt.png" alt="Github"></a>
+ </li>
+ <li>
+ <a title="Keep in touch!" href="http://twitter.com/lhoguin"><img src="/img/ico_microblog.png" data-hover="/img/ico_microblog_alt.png"></a>
+ </li>
+ <li>
+ <a title="Contact me" href="mailto:[email protected]"><img src="/img/ico_mail.png" data-hover="/img/ico_mail_alt.png"></a>
+ </li>
+ </ul>
+ </div>
+ </div>
+ </div>
+ </div>
+
+
+</header>
+
+<div id="contents" class="two_col">
+<div class="container">
+<div class="row">
+<div id="docs" class="span9 maincol">
+
+<h1 class="lined-header"><span>Migrating from Cowboy 1.0 to 2.0</span></h1>
+
+<div class="paragraph"><p>A lot has changed between Cowboy 1.0 and 2.0. The <code>cowboy_req</code>
+interface in particular has seen a massive revamp. Hooks are
+gone, their functionality can now be achieved via stream
+handlers.</p></div>
+<div class="paragraph"><p>The documentation has seen great work, in particular the
+manual. Each module and each function now has its own dedicated
+manual page with full details and examples.</p></div>
+<div class="sect1">
+<h2 id="_compatibility">Compatibility</h2>
+<div class="sectionbody">
+<div class="paragraph"><p>Compatibility with Erlang/OTP R16, 17 and 18 has been dropped.
+Erlang/OTP 19.0 or above is required. It is non-trivial to
+make Cowboy 2.0 work with older Erlang/OTP versions.</p></div>
+<div class="paragraph"><p>Cowboy 2.0 is not compatible with Cowlib versions older than
+2.0. It should be compatible with Ranch 1.0 or above, however
+it has not been tested with Ranch versions older than 1.4.</p></div>
+<div class="paragraph"><p>Cowboy 2.0 is tested on Arch Linux, Ubuntu, FreeBSD, Windows
+and OSX. It is tested with every point release (latest patch
+release) and also with HiPE on the most recent release.</p></div>
+<div class="paragraph"><p>Cowboy 2.0 now comes with Erlang.mk templates.</p></div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_features_added">Features added</h2>
+<div class="sectionbody">
+<div class="ulist"><ul>
+<li>
+<p>
+The HTTP/2 protocol is now supported.
+</p>
+</li>
+<li>
+<p>
+Cowboy no longer uses only one process per connection.
+ It now uses one process per connection plus one process
+ per request by default. This is necessary for HTTP/2.
+ There might be a slight drop in performance for HTTP/1.1
+ connections due to this change.
+</p>
+</li>
+<li>
+<p>
+Cowboy internals have largely been reworked in order to
+ support HTTP/2. This opened the way to stream handlers,
+ which are a chain of modules that are called whenever
+ something happens relating to a request/response.
+</p>
+</li>
+<li>
+<p>
+The <code>cowboy_stream_h</code> stream handler has been added.
+ It provides most of Cowboy&#8217;s default behavior.
+</p>
+</li>
+<li>
+<p>
+The <code>cowboy_compress_h</code> stream handler has been added.
+ It compresses responses when possible. It&#8217;s worth noting
+ that it compresses in more cases than Cowboy 1.0 ever did.
+</p>
+</li>
+<li>
+<p>
+Because of the many changes in the internals of Cowboy,
+ many options have been added or modified. Of note is that
+ the Websocket options are now given per handler rather
+ than for the entire listener.
+</p>
+</li>
+<li>
+<p>
+Websocket permessage-deflate compression is now supported
+ via the <code>websocket_compress</code> option.
+</p>
+</li>
+<li>
+<p>
+Static file handlers will now correctly find files found
+ in <em>.ez</em> archives.
+</p>
+</li>
+<li>
+<p>
+Constraints have been generalized and are now used not only
+ in the router but also in some <code>cowboy_req</code> functions. Their
+ interface has also been modified to allow for reverse
+ operations and formatting of errors.
+</p>
+</li>
+</ul></div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_features_removed">Features removed</h2>
+<div class="sectionbody">
+<div class="ulist"><ul>
+<li>
+<p>
+SPDY support has been removed. Use HTTP/2 instead.
+</p>
+</li>
+<li>
+<p>
+Hooks have been removed. Use <a href="../streams">stream handlers</a> instead.
+</p>
+</li>
+<li>
+<p>
+The undocumented <code>waiting_stream</code> hack has been removed.
+ It allowed disabling chunked transfer-encoding for HTTP/1.1.
+ It has no equivalent in Cowboy 2.0. Open a ticket if necessary.
+</p>
+</li>
+<li>
+<p>
+Sub protocols still exist, but their interface has largely changed
+ and they are no longer documented for the time being.
+</p>
+</li>
+</ul></div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_changed_behaviors">Changed behaviors</h2>
+<div class="sectionbody">
+<div class="ulist"><ul>
+<li>
+<p>
+The handler behaviors have been renamed and are now <code>cowboy_handler</code>,
+ <code>cowboy_loop</code>, <code>cowboy_rest</code> and <code>cowboy_websocket</code>.
+</p>
+</li>
+<li>
+<p>
+Plain HTTP, loop, REST and Websocket handlers have had their
+ init and terminate callbacks unified. They now all use the
+ <code>init/2</code> and <code>terminate/3</code> callbacks. The latter is now optional.
+ The terminate reason has now been documented for all handlers.
+</p>
+</li>
+<li>
+<p>
+The tuple returned to switch to a different handler type has
+ changed. It now takes the form <code>{Module, Req, State}</code> or
+ <code>{Module, Req, State, Opts}</code>, where <code>Opts</code> is a map of options
+ to configure the handler. The timeout and hibernate options
+ must now be specified using this map, where applicable.
+</p>
+</li>
+<li>
+<p>
+All behaviors that used to accept <code>halt</code> or <code>shutdown</code> tuples
+ as a return value no longer do so. The return value is now
+ a <code>stop</code> tuple, consistent across Cowboy.
+</p>
+</li>
+<li>
+<p>
+Middlewares can no longer return an <code>error</code> tuple. They have
+ to send the response and return a <code>stop</code> tuple instead.
+</p>
+</li>
+<li>
+<p>
+The <code>known_content_type</code> REST handler callback has been removed
+ as it was found unnecessary.
+</p>
+</li>
+<li>
+<p>
+Websocket handlers have both the normal <code>init/2</code> and
+ an optional <code>websocket_init/1</code> function. The reason for
+ that exception is that the <code>websocket_*</code> callbacks execute
+ in a separate process from the <code>init/2</code> callback, and it
+ was therefore not obvious how timers or monitors should
+ be setup properly. They are effectively initializing the
+ handler before and after the HTTP/1.1 upgrade.
+</p>
+</li>
+<li>
+<p>
+Websocket handlers can now send frames directly from
+ <code>websocket_init/1</code>. The frames will be sent immediately
+ after the handshake.
+</p>
+</li>
+<li>
+<p>
+Websocket handler callbacks no longer receive the Req
+ argument. The <code>init/2</code> callback still receives it and
+ can be used to extract relevant information. The <code>terminate/3</code>
+ callback, if implemented, may still receive the Req
+ (see next bullet point).
+</p>
+</li>
+<li>
+<p>
+Websocket handlers have a new <code>req_filter</code> option that
+ can be used to customize how much information should be
+ discarded from the Req object after the handshake. Note
+ that the Req object is only available in <code>terminate/3</code>
+ past that point.
+</p>
+</li>
+<li>
+<p>
+Websocket handlers have their timeout default changed
+ from infinity to 60 seconds.
+</p>
+</li>
+</ul></div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_new_functions">New functions</h2>
+<div class="sectionbody">
+<div class="ulist"><ul>
+<li>
+<p>
+The <code>cowboy_req:scheme/1</code> function has been added.
+</p>
+</li>
+<li>
+<p>
+The <code>cowboy_req:uri/1,2</code> function has been added, replacing the
+ less powerful functions <code>cowboy_req:url/1</code> and <code>cowboy_req:host_url/1</code>.
+</p>
+</li>
+<li>
+<p>
+The functions <code>cowboy_req:match_qs/2</code> and <code>cowboy_req:match_cookies/2</code>
+ allow matching query string and cookies against constraints.
+</p>
+</li>
+<li>
+<p>
+The function <code>cowboy_req:set_resp_cookie/3</code> has been added to
+ complement <code>cowboy_req:set_resp_cookie/4</code>.
+</p>
+</li>
+<li>
+<p>
+The functions <code>cowboy_req:resp_header/2,3</code> and <code>cowboy_req:resp_headers/1</code>
+ have been added. They can be used to retrieve response headers
+ that were previously set.
+</p>
+</li>
+<li>
+<p>
+The function <code>cowboy_req:set_resp_headers/2</code> has been added. It
+ allows setting many response headers at once.
+</p>
+</li>
+<li>
+<p>
+The functions <code>cowboy_req:push/3,4</code> can be used to push resources
+ for protocols that support it (by default only HTTP/2).
+</p>
+</li>
+</ul></div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_changed_functions">Changed functions</h2>
+<div class="sectionbody">
+<div class="ulist"><ul>
+<li>
+<p>
+The <code>cowboy:start_http/4</code> function was renamed to <code>cowboy:start_clear/3</code>.
+</p>
+</li>
+<li>
+<p>
+The <code>cowboy:start_https/4</code> function was renamed to <code>cowboy:start_tls/3</code>.
+</p>
+</li>
+<li>
+<p>
+Most, if not all, functions in the <code>cowboy_req</code> module have been modified.
+ Please consult the changelog of each individual functions. The changes
+ are mainly about simplifying and clarifying the interface. The Req is no
+ longer returned when not necessary, maps are used wherever possible,
+ and some functions have been renamed.
+</p>
+</li>
+<li>
+<p>
+The position of the <code>Opts</code> argument for <code>cowboy_req:set_resp_cookie/4</code>
+ has changed to improve consistency. It is now the last argument.
+</p>
+</li>
+</ul></div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_removed_functions">Removed functions</h2>
+<div class="sectionbody">
+<div class="ulist"><ul>
+<li>
+<p>
+The functions <code>cowboy_req:url/1</code> and <code>cowboy_req:host_url/1</code> have been
+ removed in favor of the new function <code>cowboy_req:uri/1,2</code>.
+</p>
+</li>
+<li>
+<p>
+The functions <code>cowboy_req:meta/2,3</code> and <code>cowboy_req:set_meta/3</code> have
+ been removed. The Req object is now a public map, therefore they became
+ unnecessary.
+</p>
+</li>
+<li>
+<p>
+The functions <code>cowboy_req:set_resp_body_fun/2,3</code> have been removed.
+ For sending files, the function <code>cowboy_req:set_resp_body/2</code> can now
+ take a sendfile tuple.
+</p>
+</li>
+<li>
+<p>
+Remove many undocumented functions from <code>cowboy_req</code>, including the
+ functions <code>cowboy_req:get/2</code> and <code>cowboy_req:set/3</code>.
+</p>
+</li>
+</ul></div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_other_changes">Other changes</h2>
+<div class="sectionbody">
+<div class="ulist"><ul>
+<li>
+<p>
+The correct percent-decoding algorithm is now used for path elements
+ during routing. It will no longer decode <code>+</code> characters.
+</p>
+</li>
+<li>
+<p>
+The router will now properly handle path segments <code>.</code> and <code>..</code>.
+</p>
+</li>
+<li>
+<p>
+Routing behavior has changed for URIs containing latin1 characters.
+ They are no longer allowed. URIs are expected to be in UTF-8 once
+ they are percent-decoded.
+</p>
+</li>
+<li>
+<p>
+Etag comparison in REST handlers has been fixed. Some requests may
+ now fail when they succeeded in the past.
+</p>
+</li>
+<li>
+<p>
+The <code>If-*-Since</code> headers are now ignored in REST handlers if
+ the corresponding <code>If*-Match</code> header exist. The former is
+ largely a backward compatible header and this shouldn&#8217;t create
+ any issue. The new behavior follows the current RFCs more closely.
+</p>
+</li>
+<li>
+<p>
+The static file handler has been improved to handle more special
+ characters on systems that accept them.
+</p>
+</li>
+</ul></div>
+</div>
+</div>
+
+
+
+
+
+
+
+ <nav style="margin:1em 0">
+
+ <a style="float:left" href="https://ninenines.eu/docs/en/cowboy/2.0/guide/sub_protocols/">
+ Sub protocols
+ </a>
+
+
+
+ <a style="float:right" href="https://ninenines.eu/docs/en/cowboy/2.0/guide/specs/">
+ HTTP and other specifications
+ </a>
+
+ </nav>
+
+
+
+
+</div>
+
+<div class="span3 sidecol">
+
+
+<h3>
+ Cowboy
+ 2.0
+
+ User Guide
+</h3>
+
+<ul>
+
+ <li><a href="/docs/en/cowboy/2.0/guide">User Guide</a></li>
+
+
+ <li><a href="/docs/en/cowboy/2.0/manual">Function Reference</a></li>
+
+
+</ul>
+
+<h4 id="docs-nav">Navigation</h4>
+
+<h4>Version select</h4>
+<ul>
+
+
+
+ <li><a href="/docs/en/cowboy/2.0/guide">2.0</a></li>
+
+ <li><a href="/docs/en/cowboy/1.0/guide">1.0</a></li>
+
+</ul>
+
+</div>
+</div>
+</div>
+</div>
+
+ <footer>
+ <div class="container">
+ <div class="row">
+ <div class="span6">
+ <p id="scroll-top"><a href="#">↑ Scroll to top</a></p>
+ <nav>
+ <ul>
+ <li><a href="mailto:[email protected]" title="Contact us">Contact us</a></li><li><a href="https://github.com/ninenines/ninenines.github.io" title="Github repository">Contribute to this site</a></li>
+ </ul>
+ </nav>
+ </div>
+ <div class="span6 credits">
+ <p><img src="/img/footer_logo.png"></p>
+ <p>Copyright &copy; Loïc Hoguin 2012-2016</p>
+ </div>
+ </div>
+ </div>
+ </footer>
+
+
+ <script src="/js/custom.js"></script>
+ </body>
+</html>
+
+
diff --git a/docs/en/cowboy/2.0/guide/specs.asciidoc b/docs/en/cowboy/2.0/guide/specs.asciidoc
index 73c8e981..3bcd45e1 100644
--- a/docs/en/cowboy/2.0/guide/specs.asciidoc
+++ b/docs/en/cowboy/2.0/guide/specs.asciidoc
@@ -1,3 +1,4 @@
+[appendix]
== HTTP and other specifications
This chapter intends to list all the specification documents
@@ -81,6 +82,7 @@ for or related to HTTP.
* https://tools.ietf.org/html/rfc7932[RFC 7932]: Brotli Compressed Data Format
* https://tools.ietf.org/html/rfc8053[RFC 8053]: HTTP Authentication Extensions for Interactive Clients
* https://tools.ietf.org/html/rfc8164[RFC 8164]: Opportunistic Security for HTTP/2
+* https://tools.ietf.org/html/rfc8188[RFC 8188]: Encrypted Content-Encoding for HTTP
* https://www.w3.org/TR/webmention/[Webmention]: Webmention
==== Upcoming
diff --git a/docs/en/cowboy/2.0/guide/specs/index.html b/docs/en/cowboy/2.0/guide/specs/index.html
index a7467186..7a8135c2 100644
--- a/docs/en/cowboy/2.0/guide/specs/index.html
+++ b/docs/en/cowboy/2.0/guide/specs/index.html
@@ -437,6 +437,11 @@ for or related to HTTP.</p></div>
</li>
<li>
<p>
+<a href="https://tools.ietf.org/html/rfc8188">RFC 8188</a>: Encrypted Content-Encoding for HTTP
+</p>
+</li>
+<li>
+<p>
<a href="https://www.w3.org/TR/webmention/">Webmention</a>: Webmention
</p>
</li>
@@ -894,8 +899,8 @@ for or related to HTTP.</p></div>
<nav style="margin:1em 0">
- <a style="float:left" href="https://ninenines.eu/docs/en/cowboy/2.0/guide/sub_protocols/">
- Sub protocols
+ <a style="float:left" href="https://ninenines.eu/docs/en/cowboy/2.0/guide/migrating_from_1.0/">
+ Migrating from Cowboy 1.0 to 2.0
</a>
diff --git a/docs/en/cowboy/2.0/guide/sub_protocols/index.html b/docs/en/cowboy/2.0/guide/sub_protocols/index.html
index 26015611..0b4f55ee 100644
--- a/docs/en/cowboy/2.0/guide/sub_protocols/index.html
+++ b/docs/en/cowboy/2.0/guide/sub_protocols/index.html
@@ -151,8 +151,8 @@ the optional <code>terminate/3</code> callback is called, if present.</p></div>
- <a style="float:right" href="https://ninenines.eu/docs/en/cowboy/2.0/guide/specs/">
- HTTP and other specifications
+ <a style="float:right" href="https://ninenines.eu/docs/en/cowboy/2.0/guide/migrating_from_1.0/">
+ Migrating from Cowboy 1.0 to 2.0
</a>
</nav>
diff --git a/docs/en/cowboy/2.0/manual/cowboy/index.html b/docs/en/cowboy/2.0/manual/cowboy/index.html
index f7559e68..1a2a4d08 100644
--- a/docs/en/cowboy/2.0/manual/cowboy/index.html
+++ b/docs/en/cowboy/2.0/manual/cowboy/index.html
@@ -175,14 +175,11 @@ http://www.gnu.org/software/src-highlite -->
<div class="paragraph"><p>Options for the HTTP/1.1, HTTP/2 and Websocket protocols.</p></div>
<div class="paragraph"><p>The protocol options are in a map containing all the options for
the different protocols that may be involved when connecting
-to the listener, including HTTP/1.1 and HTTP/2 but also
-subprotocols like Websocket.</p></div>
+to the listener, including HTTP/1.1 and HTTP/2.</p></div>
<div class="paragraph"><p>The HTTP/1.1 options are documented in the
-<a href="../cowboy_http">cowboy_http(3)</a> manual;
-the HTTP/2 options in
-<a href="../cowboy_http2">cowboy_http2(3)</a>;
-and the Websocket options in
-<a href="../cowboy_websocket">cowboy_websocket(3)</a>.</p></div>
+<a href="../cowboy_http">cowboy_http(3)</a> manual
+and the HTTP/2 options in
+<a href="../cowboy_http2">cowboy_http2(3)</a>.</p></div>
</div>
</div>
</div>
diff --git a/docs/index.xml b/docs/index.xml
index cdfc9ab4..29522471 100644
--- a/docs/index.xml
+++ b/docs/index.xml
@@ -369,50 +369,6 @@ environment configuration parameters.&lt;/p&gt;&lt;/div&gt;
&lt;div class=&#34;sect1&#34;&gt;
&lt;h2 id=&#34;_additional_information&#34;&gt;Additional information&lt;/h2&gt;
&lt;div class=&#34;sectionbody&#34;&gt;
-&lt;div class=&#34;ulist&#34;&gt;&lt;ul&gt;
-&lt;li&gt;
-&lt;p&gt;
-&lt;a href=&#34;specs/&#34;&gt;HTTP and other specifications&lt;/a&gt;
-&lt;/p&gt;
-&lt;/li&gt;
-&lt;/ul&gt;&lt;/div&gt;
-&lt;/div&gt;
-&lt;/div&gt;
-&lt;div class=&#34;sect1&#34;&gt;
-&lt;h2 id=&#34;_deprecated_chapters&#34;&gt;Deprecated chapters&lt;/h2&gt;
-&lt;div class=&#34;sectionbody&#34;&gt;
-&lt;/div&gt;
-&lt;/div&gt;
-&lt;div class=&#34;sect1&#34;&gt;
-&lt;h2 id=&#34;_about_the_deprecated_chapters&#34;&gt;About the deprecated chapters&lt;/h2&gt;
-&lt;div class=&#34;sectionbody&#34;&gt;
-&lt;div class=&#34;paragraph&#34;&gt;&lt;p&gt;The following chapters were relevant in Cowboy 1.0. They have
-not been updated for Cowboy 2.0 yet. The information in these
-chapters may or may not be useful.&lt;/p&gt;&lt;/div&gt;
-&lt;div class=&#34;ulist&#34;&gt;&lt;ul&gt;
-&lt;li&gt;
-&lt;p&gt;
-&lt;a href=&#34;architecture/&#34;&gt;Architecture&lt;/a&gt;
-&lt;/p&gt;
-&lt;/li&gt;
-&lt;li&gt;
-&lt;p&gt;
-&lt;a href=&#34;broken_clients/&#34;&gt;Dealing with broken clients&lt;/a&gt;
-&lt;/p&gt;
-&lt;/li&gt;
-&lt;li&gt;
-&lt;p&gt;
-&lt;a href=&#34;hooks/&#34;&gt;Hooks&lt;/a&gt;
-&lt;/p&gt;
-&lt;/li&gt;
-&lt;li&gt;
-&lt;p&gt;
-&lt;a href=&#34;overview/&#34;&gt;Overview&lt;/a&gt;
-&lt;/p&gt;
-&lt;/li&gt;
-&lt;/ul&gt;&lt;/div&gt;
-&lt;/div&gt;
-&lt;/div&gt;
</description>
</item>
@@ -1226,14 +1182,11 @@ http://www.gnu.org/software/src-highlite --&gt;
&lt;div class=&#34;paragraph&#34;&gt;&lt;p&gt;Options for the HTTP/1.1, HTTP/2 and Websocket protocols.&lt;/p&gt;&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;&lt;p&gt;The protocol options are in a map containing all the options for
the different protocols that may be involved when connecting
-to the listener, including HTTP/1.1 and HTTP/2 but also
-subprotocols like Websocket.&lt;/p&gt;&lt;/div&gt;
+to the listener, including HTTP/1.1 and HTTP/2.&lt;/p&gt;&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;&lt;p&gt;The HTTP/1.1 options are documented in the
-&lt;a href=&#34;../cowboy_http&#34;&gt;cowboy_http(3)&lt;/a&gt; manual;
-the HTTP/2 options in
-&lt;a href=&#34;../cowboy_http2&#34;&gt;cowboy_http2(3)&lt;/a&gt;;
-and the Websocket options in
-&lt;a href=&#34;../cowboy_websocket&#34;&gt;cowboy_websocket(3)&lt;/a&gt;.&lt;/p&gt;&lt;/div&gt;
+&lt;a href=&#34;../cowboy_http&#34;&gt;cowboy_http(3)&lt;/a&gt; manual
+and the HTTP/2 options in
+&lt;a href=&#34;../cowboy_http2&#34;&gt;cowboy_http2(3)&lt;/a&gt;.&lt;/p&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
diff --git a/donate/index.html b/donate/index.html
index 0d5a079d..0138efb2 100644
--- a/donate/index.html
+++ b/donate/index.html
@@ -484,6 +484,8 @@ and Erlang.mk is fantastic:</p></div>
+
+
</div>
</div>
</div>
diff --git a/index.html b/index.html
index 31376769..90b1343d 100644
--- a/index.html
+++ b/index.html
@@ -626,6 +626,8 @@ or buy <a href="/articles/erlanger-playbook">The Erlanger Playbook</a></p></div>
+
+
</div>
</div>
diff --git a/services/index.html b/services/index.html
index 3e72c339..b1b1a6c9 100644
--- a/services/index.html
+++ b/services/index.html
@@ -569,6 +569,8 @@ and Erlang.mk is fantastic:</p></div>
+
+
</div>
</div>
</div>
diff --git a/sitemap.xml b/sitemap.xml
index 24c19a60..963fc92b 100644
--- a/sitemap.xml
+++ b/sitemap.xml
@@ -771,6 +771,10 @@
</url>
<url>
+ <loc>https://ninenines.eu/docs/en/cowboy/2.0/guide/migrating_from_1.0/</loc>
+ </url>
+
+ <url>
<loc>https://ninenines.eu/docs/en/cowboy/2.0/guide/specs/</loc>
</url>