<p>This module relies on <ahref="http://nghttp2.org/">libnghttp2</a>
to provide the core http/2 engine.</p>
@@ -43,19 +43,129 @@
consult the "CHANGES" file for potential updates.</p>
</note>
<p>You must enable HTTP/2 via <directive
module="core">Protocols</directive> in order to use the
functionality described in this document:</p>
<p>You must enable HTTP/2 via <directivemodule="core">Protocols</directive> in order to use the
functionality described in this document. The HTTP/2 protocol <ahref="https://http2.github.io/faq/#does-http2-require-encryption">does not require</a> the use of encryption so two schemes are available: <code>h2</code> (HTTP/2 over TLS) and <code>h2c</code> (HTTP/2 over TCP).</p>
<p>Two useful configuration schemes are:</p>
<note><title>HTTP/2 in a VirtualHost context (TLS only)</title>
<highlightlanguage="config">
Protocols h2 http/1.1
</highlight>
<p>Allows HTTP/2 negotiation (h2) via TLS ALPN in a secure <directive>VirtualHost</directive>. HTTP/2 preamble checking (Direct mode, see <directive>H2Direct</directive>) is disabled by default for <code>h2</code>.</p>
</note>
<note><title>HTTP/2 in a Server context (TLS and cleartext)</title>
<highlightlanguage="config">
Protocols h2 h2c http/1.1
</highlight>
<p>Allows HTTP/2 negotiation (h2) via TLS ALPN for secure <directive>VirtualHost</directive>. Allows HTTP/2 cleartext negotiation (h2c) upgrading from an initial HTTP/1.1 connection or via HTTP/2 preamble checking (Direct mode, see <directive>H2Direct</directive>).</p>
</note>
<p>Refer to the official <ahref="https://http2.github.io/faq">HTTP/2 FAQ</a> for any doubt about the protocol.</p>
This module can be configured to provide HTTP/2 related information
as additional environment variables to the SSI and CGI namespace, as well
as in custom log configurations (see <code>%{VAR_NAME}e</code>).
</p>
@@ -76,6 +186,7 @@
<tr><td><code>H2_STREAM_ID</code></td><td>number</td><td>HTTP/2 stream number of this request.</td></tr>
<tr><td><code>H2_STREAM_TAG</code></td><td>string</td><td>HTTP/2 process unique stream identifier, consisting of connection id and stream id separated by <code>-</code>.</td></tr>
</table>
</section>
</section>
@@ -220,7 +331,7 @@
<p>
The push diary records a digest (currently using a 64 bit number) of pushed
resources (their URL) to avoid duplicate pushes on the same connection.
These value are not persisted, so clients openeing a new connection
These value are not persisted, so clients opening a new connection
will experience known pushes again. There is ongoing work to enable
a client to disclose a digest of the resources it already has, so
the diary maybe initialized by the client on each connection setup.
@@ -269,12 +380,12 @@
When a stream has more than one dependant, say X1 and X2 both
depend on Y, the <em>weight</em> determines the bandwidth
allocation. If X1 and X2 have the same weight, they both get
half of the available bandwdith. If the weight of X1 is twice
half of the available bandwidth. If the weight of X1 is twice
as large as that for X2, X1 gets twice the bandwidth of X2.
</p>
<p>
Ultimately, every stream depends on the <em>root</em> stream which
gets all the bandwidht available, but never sends anything. So all
gets all the bandwidth available, but never sends anything. So all
its bandwidth is distributed by weight among its children. Which
either have data to send or distribute the bandwidth to their
own children. And so on. If none of the children have data