Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJetty Bot2020-03-20 09:27:48 +0000
committerJetty Bot2020-03-20 09:27:48 +0000
commit10ec4f0a5cb079f3a07da3e475170346e3a02442 (patch)
tree7830218cd8277c0a1b65ebcc2d6c30f4359cd2df /documentation/9.4.x/alpn-chapter.html
parent4e5d01da649a20aa7f34d013ea431989b5238da3 (diff)
downloadjetty-10ec4f0a5cb079f3a07da3e475170346e3a02442.tar.gz
jetty-10ec4f0a5cb079f3a07da3e475170346e3a02442.tar.xz
jetty-10ec4f0a5cb079f3a07da3e475170346e3a02442.zip
jetty-website: deploy
Diffstat (limited to 'documentation/9.4.x/alpn-chapter.html')
-rw-r--r--documentation/9.4.x/alpn-chapter.html38
1 files changed, 31 insertions, 7 deletions
diff --git a/documentation/9.4.x/alpn-chapter.html b/documentation/9.4.x/alpn-chapter.html
index fdf0b2bc10..7fab246cac 100644
--- a/documentation/9.4.x/alpn-chapter.html
+++ b/documentation/9.4.x/alpn-chapter.html
@@ -12,15 +12,39 @@ negotiation within a Transport Layer Security (TLS) handshake.
A protocol negotiation called ALPN (Application Layer Protocol Negotiation -
<a class="link" href="https://tools.ietf.org/html/rfc7301" target="_top">RFC7301</a>) has been defined to accomplish this.</p><p>ALPN has now replaced the older (and now fully deprecated) NPN in the general Web
as of 2016.</p><p>For those browsers that support HTTP/2, they all now support ALPN.
-Starting with Jetty 9.3.0, only ALPN is supported by Jetty.</p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="alpn"></a>Introducing ALPN</h2></div></div></div><div class="toc"><dl class="toc"><dt><span class="section"><a href="alpn-chapter.html#alpn-openjdk8">ALPN and OpenJDK 8</a></span></dt><dt><span class="section"><a href="alpn-chapter.html#alpn-conscrypt">ALPN and Conscrypt</a></span></dt><dt><span class="section"><a href="alpn-chapter.html#alpn-jdk9">ALPN and JDK 9</a></span></dt><dt><span class="section"><a href="alpn-chapter.html#alpn-troubleshooting">ALPN Troubleshooting</a></span></dt><dt><span class="section"><a href="alpn-chapter.html#alpn-openjdk8-details">Details about ALPN and OpenJDK 8</a></span></dt><dt><span class="section"><a href="alpn-chapter.html#alpn-openjdk8-client-example">Client Example</a></span></dt><dt><span class="section"><a href="alpn-chapter.html#alpn-openjdk8-server-example">Server Example</a></span></dt><dt><span class="section"><a href="alpn-chapter.html#alpn-openjdk8-implementation">Implementation Details</a></span></dt><dt><span class="section"><a href="alpn-chapter.html#alpn-openjdk8-tests">Unit Tests</a></span></dt><dt><span class="section"><a href="alpn-chapter.html#alpn-openjdk8-debugging">Debugging</a></span></dt><dt><span class="section"><a href="alpn-chapter.html#alpn-openjdk8-license-details">License Details</a></span></dt><dt><span class="section"><a href="alpn-chapter.html#alpn-versions">Versions</a></span></dt><dt><span class="section"><a href="alpn-chapter.html#alpn-build">How to build ALPN</a></span></dt></dl></div><p>Application Layer Protocol Negotiation (ALPN) is a TLS extension that allows client and server to negotiate the application protocol that they will use to communicate within the encryption provided by TLS.</p><p>Any protocol can be negotiated by ALPN within a TLS connection; the protocols that are most commonly negotiated are HTTP/2 and HTTP/1.1.</p><p>Browsers only support HTTP/2 over TLS by negotiating the HTTP/2 protocol via ALPN.
+Starting with Jetty 9.3.0, only ALPN is supported by Jetty.</p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="alpn"></a>Introducing ALPN</h2></div></div></div><div class="toc"><dl class="toc"><dt><span class="section"><a href="alpn-chapter.html#alpn-openjdk8">ALPN and OpenJDK 8</a></span></dt><dt><span class="section"><a href="alpn-chapter.html#alpn-openjdk8-agent">ALPN agent and OpenJDK 8</a></span></dt><dt><span class="section"><a href="alpn-chapter.html#alpn-conscrypt">ALPN and Conscrypt</a></span></dt><dt><span class="section"><a href="alpn-chapter.html#alpn-jdk9">ALPN and JDK 9</a></span></dt><dt><span class="section"><a href="alpn-chapter.html#alpn-troubleshooting">ALPN Troubleshooting</a></span></dt><dt><span class="section"><a href="alpn-chapter.html#alpn-openjdk8-details">Details about ALPN and OpenJDK 8</a></span></dt><dt><span class="section"><a href="alpn-chapter.html#alpn-openjdk8-client-example">Client Example</a></span></dt><dt><span class="section"><a href="alpn-chapter.html#alpn-openjdk8-server-example">Server Example</a></span></dt><dt><span class="section"><a href="alpn-chapter.html#alpn-openjdk8-implementation">Implementation Details</a></span></dt><dt><span class="section"><a href="alpn-chapter.html#alpn-openjdk8-tests">Unit Tests</a></span></dt><dt><span class="section"><a href="alpn-chapter.html#alpn-openjdk8-debugging">Debugging</a></span></dt><dt><span class="section"><a href="alpn-chapter.html#alpn-openjdk8-license-details">License Details</a></span></dt><dt><span class="section"><a href="alpn-chapter.html#alpn-versions">Versions</a></span></dt><dt><span class="section"><a href="alpn-chapter.html#alpn-build">How to build ALPN</a></span></dt></dl></div><p>Application Layer Protocol Negotiation (ALPN) is a TLS extension that allows client and server to negotiate the application protocol that they will use to communicate within the encryption provided by TLS.</p><p>Any protocol can be negotiated by ALPN within a TLS connection; the protocols that are most commonly negotiated are HTTP/2 and HTTP/1.1.</p><p>Browsers only support HTTP/2 over TLS by negotiating the HTTP/2 protocol via ALPN.
You need to configure the server to support TLS and ALPN if you want browsers to use
-the HTTP/2 protocol, otherwise they will default to HTTP/1.1.</p><p>In the Jetty project, ALPN is <span class="emphasis"><em>used</em></span> in two artifacts: <code class="literal">jetty-alpn-client</code> and <code class="literal">jetty-alpn-server</code>, respectively for the client and for the server.</p><p>When using Jetty as a standalone server via the Jetty distribution, the <code class="literal">jetty-alpn-server</code> artifact is automatically included in the server classpath by the Jetty module system.</p><p>When using Jetty embedded, the <code class="literal">jetty-alpn-client</code> and <code class="literal">jetty-alpn-server</code> artifacts must be included in the classpath, respectively for client and server use cases.</p><p>The ALPN implementation is <span class="emphasis"><em>provided</em></span> to these two artifacts with the following three options:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p class="simpara">For JDK 8 only, a provider based on modified OpenJDK classes</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; "><li class="listitem">Only works with JDK 8, pure Java implementation</li><li class="listitem">Requires the <code class="literal">-Xbootclasspath/p</code> option on command line</li></ul></div></li><li class="listitem"><p class="simpara">For JDK 8 or later, a provider based on the <a class="link" href="configuring-ssl.html#conscrypt" title="Conscrypt SSL">Conscrypt security provider</a></p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; "><li class="listitem">Works with JDK 8 or later and provides improved performance</li><li class="listitem">Binds to the OpenSSL native library shipped by Conscrypt and is therefore only available on the platforms supported by Conscrypt</li></ul></div></li><li class="listitem"><p class="simpara">For JDK 9 or later, a provider based on the ALPN APIs present in the JDK</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; "><li class="listitem">Works with JDK 9 or later, pure Java implementation</li><li class="listitem">Lower performance than Conscrypt</li></ul></div></li></ul></div><p>The first, although hosted under the umbrella of the Jetty project, is independent of Jetty (the Servlet Container); you can use it in any other Java network server.</p><p>Each provider above provides an ALPN <span class="emphasis"><em>service</em></span> implementation; Jetty uses the <code class="literal">ServiceLoader</code> mechanism to load these service implementations.
+the HTTP/2 protocol, otherwise they will default to HTTP/1.1.</p><p>In the Jetty project, ALPN is <span class="emphasis"><em>used</em></span> in two artifacts: <code class="literal">jetty-alpn-client</code> and <code class="literal">jetty-alpn-server</code>, respectively for the client and for the server.</p><p>When using Jetty as a standalone server via the Jetty distribution, the <code class="literal">jetty-alpn-server</code> artifact is automatically included in the server classpath by the Jetty module system.</p><p>When using Jetty embedded, the <code class="literal">jetty-alpn-client</code> and <code class="literal">jetty-alpn-server</code> artifacts must be included in the classpath, respectively for client and server use cases.</p><p>The ALPN implementation is <span class="emphasis"><em>provided</em></span> to these two artifacts with the following options:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p class="simpara">For Java 8 only, a provider based on a pure Java implementation (no native code)</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; "><li class="listitem">For Java 8 up to <code class="literal">1.8.0_242</code> included, this provider uses modified OpenJDK classes
+and requires the <code class="literal">-Xbootclasspath/p:</code> option on command line</li><li class="listitem">For Java 8 from <code class="literal">1.8.0_252</code> included and later, this provider uses the standard OpenJDK
+ALPN APIs introduced in Java 9 (see below) that have been backported to <code class="literal">1.8.0_252</code> and
+does not require the <code class="literal">-Xbootclasspath/p:</code> option on command line</li></ul></div></li><li class="listitem"><p class="simpara">For Java 8 or later, a provider based on the <a class="link" href="configuring-ssl.html#conscrypt" title="Conscrypt SSL">Conscrypt security provider</a></p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; "><li class="listitem">Works with JDK 8 or later and provides improved performance</li><li class="listitem">Binds to the OpenSSL native library shipped by Conscrypt and is therefore only available on the platforms supported by Conscrypt</li></ul></div></li><li class="listitem"><p class="simpara">For Java 9 or later, a provider based on the standard OpenJDK ALPN APIs</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; "><li class="listitem">Works with JDK 9 or later, pure Java implementation (no native code)</li><li class="listitem">Lower performance than Conscrypt</li></ul></div></li></ul></div><p>Each provider above provides an ALPN <span class="emphasis"><em>service</em></span> implementation; Jetty uses the <code class="literal">ServiceLoader</code> mechanism to load these service implementations.
At least one valid provider must be present in the server classpath.
For example, using JDK 8 with the JDK 9 ALPN provider is an <span class="emphasis"><em>invalid</em></span> combination.
The absence of valid implementations is an error at startup (see also the <a class="link" href="alpn-chapter.html#alpn-troubleshooting" title="ALPN Troubleshooting">troubleshooting section</a>).</p><p>There may be multiple ALPN service providers in the server classpath.
-When a new connection is created, an <code class="literal">SSLEngine</code> instance is associated to it; each <code class="literal">SSLEngine</code> is passed all service implementations, until one accepts it.</p><p>It is therefore possible to have multiple providers active at the same time, for example the JDK 9 provider and the Conscrypt provider, and at runtime the correct one will be chosen by the Jetty runtime.</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="alpn-openjdk8"></a>ALPN and OpenJDK 8</h3></div></div></div><p>When using JDKs based on OpenJDK 8 (for JDK 9 see <a class="link" href="alpn-chapter.html#alpn-jdk9" title="ALPN and JDK 9">above</a>), and you do not or cannot use <a class="link" href="configuring-ssl.html#conscrypt" title="Conscrypt SSL">Conscrypt</a>, you can use Jetty&#8217;s ALPN boot library to provide the ALPN service implementation, via the <code class="literal">alpn-boot</code> artifact.</p><p>The Jetty ALPN boot library modifies the relevant OpenJDK classes to add ALPN support and provides an ALPN API that application can use to enable ALPN.</p><p>When using Jetty as a standalone server via the Jetty distribution, ALPN support is automatically enabled when the <code class="literal">http2</code> module is enabled.
-This enables transitively the <code class="literal">alpn-8</code> module which puts the <code class="literal">jetty-alpn-openjdk8-server</code> artifact in the server classpath, providing the ALPN OpenJDK 8 service implementation.</p><p>When using Jetty embedded, the ALPN support is provided by the <code class="literal">jetty-alpn-openjdk8-client</code> and <code class="literal">jetty-alpn-openjdk8-server</code> artifacts, respectively for client usage and server usage.</p><p>To get ALPN working with the Jetty ALPN Boot library, you need:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">to start the JVM with the Jetty ALPN Boot library in the boot classpath</li><li class="listitem">to have the <code class="literal">jetty-alpn-openjdk8-client</code> artifact or the <code class="literal">jetty-alpn-openjdk8-server</code>
-artifact in the classpath</li></ul></div><p>Start the JVM as follows:</p><pre xmlns:jfetch="java:org.eclipse.jetty.xslt.tools.JavaSourceFetchExtension" xmlns:fetch="java:org.eclipse.jetty.xslt.tools.SourceFetchExtension" xmlns:d="http://docbook.org/ns/docbook" xmlns:l="http://docbook.sourceforge.net/xmlns/l10n/1.0" xmlns:xslthl="http://xslthl.sf.net" xmlns:gcse="http://www.google.com" xmlns:date="http://exslt.org/dates-and-times"><code>java -Xbootclasspath/p:&lt;path_to_alpn_boot_jar&gt; ...</code></pre><p>Where <code class="literal">path_to_alpn_boot_jar</code> is the path on the file system for the <code class="literal">alpn-boot</code> artifact, such as the one at the Maven coordinates <code class="literal">org.mortbay.jetty.alpn:alpn-boot</code>.</p><p>Be certain to get the <a class="link" href="alpn-chapter.html#alpn-versions" title="Versions">ALPN boot artifact version that matches the version of your JRE</a>.</p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="alpn-conscrypt"></a>ALPN and Conscrypt</h3></div></div></div><p>When using JDK 8 or later, you can use the <a class="link" href="https://conscrypt.org/" target="_top">Conscrypt</a> security provider to provide the ALPN service implementation.</p><p>Conscrypt binds natively to BoringSSL (a fork of OpenSSL by Google), so ALPN will be supported via the support provided by BoringSSL (bundled together with Conscrypt).</p><p>When using Jetty as a standalone server via the Jetty distribution, ALPN is enabled by enabling the <code class="literal">conscrypt</code> module.</p><p>When using Jetty embedded, ALPN is enabled by the <code class="literal">jetty-alpn-conscrypt-client</code> and <code class="literal">jetty-alpn-conscrypt-server</code> artifacts, respectively for client usage and server usage.
+When a new connection is created, an <code class="literal">SSLEngine</code> instance is associated to it; each <code class="literal">SSLEngine</code> is passed all service implementations, until one accepts it.</p><p>It is therefore possible to have multiple providers active at the same time, for example the JDK 9 provider and the Conscrypt provider, and at runtime the correct one will be chosen by the Jetty runtime.</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="alpn-openjdk8"></a>ALPN and OpenJDK 8</h3></div></div></div><p>When using JDKs based on OpenJDK 8 (for JDK 9 see <a class="link" href="alpn-chapter.html#alpn-jdk9" title="ALPN and JDK 9">here</a>), and you do not or
+cannot use <a class="link" href="configuring-ssl.html#conscrypt" title="Conscrypt SSL">Conscrypt</a>, the ALPN implementation is provided by the
+<code class="literal">jetty-alpn-openjdk8-client</code> or <code class="literal">jetty-alpn-openjdk8-server</code> artifacts.</p><p>For Java 8 versions up to <code class="literal">1.8.0_242</code> included, you also need the Jetty&#8217;s ALPN boot library
+to provide the ALPN service implementation, via the <code class="literal">alpn-boot</code> artifact.
+For Java 8 versions from <code class="literal">1.8.0_252</code> included and later, Jetty&#8217;s ALPN boot library is not
+necessary because the OpenJDK ALPN APIs have been backported to <code class="literal">1.8.0_252</code> and the
+<code class="literal">jetty-alpn-openjdk8-*</code> artifacts can use these backported APIs if their presence is detected.</p><p>Alternatively, you can use the <a class="link" href="alpn-chapter.html#alpn-openjdk8-agent" title="ALPN agent and OpenJDK 8">Jetty ALPN agent</a>, that in turn uses
+theJetty ALPN boot library to transform the relevant OpenJDK classes when they are loaded.</p><p>The Jetty ALPN boot library modifies the relevant OpenJDK classes to add ALPN support and provides an ALPN API that application can use to enable ALPN.</p><p>When using Jetty as a standalone server via the Jetty distribution, ALPN support is automatically enabled when the <code class="literal">http2</code> module is enabled.
+This enables transitively the <code class="literal">alpn-8</code> module which puts the <code class="literal">jetty-alpn-openjdk8-server</code> artifact in the server classpath, providing the ALPN OpenJDK 8 service implementation.</p><p>When using Jetty embedded, the ALPN support is provided by the <code class="literal">jetty-alpn-openjdk8-client</code> and <code class="literal">jetty-alpn-openjdk8-server</code> artifacts, respectively for client usage and server usage.</p><p>To get ALPN working with Java 8, you must have the <code class="literal">jetty-alpn-openjdk8-client</code> artifact or
+the <code class="literal">jetty-alpn-openjdk8-server</code> artifact in the classpath.</p><p>Additionally, if you are using OpenJDK <code class="literal">1.8.0_242</code> or earlier, you need the Jetty ALPN boot
+library (corresponding to the exact OpenJDK version you are using) in the boot classpath,
+or alternatively you need the <a class="link" href="alpn-chapter.html#alpn-openjdk8-agent" title="ALPN agent and OpenJDK 8">Jetty ALPN agent</a>.</p><p>In the case of the Jetty ALPN boot library, start the JVM as follows:</p><pre xmlns:jfetch="java:org.eclipse.jetty.xslt.tools.JavaSourceFetchExtension" xmlns:fetch="java:org.eclipse.jetty.xslt.tools.SourceFetchExtension" xmlns:d="http://docbook.org/ns/docbook" xmlns:l="http://docbook.sourceforge.net/xmlns/l10n/1.0" xmlns:xslthl="http://xslthl.sf.net" xmlns:gcse="http://www.google.com" xmlns:date="http://exslt.org/dates-and-times"><code>java -Xbootclasspath/p:&lt;path_to_alpn_boot_jar&gt; ...</code></pre><p>Where <code class="literal">path_to_alpn_boot_jar</code> is the path on the file system for the <code class="literal">alpn-boot</code> artifact, such as the one at the Maven coordinates <code class="literal">org.mortbay.jetty.alpn:alpn-boot</code>.</p><div class="blockquote"><blockquote class="blockquote"><div xmlns:jfetch="java:org.eclipse.jetty.xslt.tools.JavaSourceFetchExtension" xmlns:fetch="java:org.eclipse.jetty.xslt.tools.SourceFetchExtension" xmlns:d="http://docbook.org/ns/docbook" xmlns:l="http://docbook.sourceforge.net/xmlns/l10n/1.0" xmlns:xslthl="http://xslthl.sf.net" xmlns:gcse="http://www.google.com" xmlns:date="http://exslt.org/dates-and-times" class="important" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title"><i class="fa fa-plus" aria-hidden="true"></i> Important</h3><p>Be certain to get the
+<a class="link" href="alpn-chapter.html#alpn-versions" title="Versions">ALPN boot artifact version that matches the version of your JRE</a>.</p></div></blockquote></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="alpn-openjdk8-agent"></a>ALPN agent and OpenJDK 8</h3></div></div></div><p>The Jetty Project also maintains the
+<a class="link" href="https://github.com/jetty-project/jetty-alpn-agent" target="_top">Jetty ALPN agent</a>, which is a JVM
+agent that provides the ALPN implementation.
+The Jetty ALPN agent can be use in alternative (never together) with the
+<a class="link" href="alpn-chapter.html#alpn-openjdk8" title="ALPN and OpenJDK 8">ALPN boot library</a>.</p><p>The Jetty ALPN agent contains the ALPN boot libraries for every JDK 8 version.
+The agent can be used only with Java 8, but works with <span class="emphasis"><em>any</em></span> Java 8 version.</p><p>The Jetty ALPN agent detects the JDK version currently running, picks the correspondent
+ALPN boot library (or picks none if the JDK version is <code class="literal">1.8.0_252</code> or later), and
+transforms, if necessary, the relevant OpenJDK classes to provide the ALPN support.</p><p>To use the Jetty ALPN agent, start the JVM as follows:</p><pre xmlns:jfetch="java:org.eclipse.jetty.xslt.tools.JavaSourceFetchExtension" xmlns:fetch="java:org.eclipse.jetty.xslt.tools.SourceFetchExtension" xmlns:d="http://docbook.org/ns/docbook" xmlns:l="http://docbook.sourceforge.net/xmlns/l10n/1.0" xmlns:xslthl="http://xslthl.sf.net" xmlns:gcse="http://www.google.com" xmlns:date="http://exslt.org/dates-and-times"><code>java -javaagent:&lt;path_to_alpn_agent_jar&gt; ...</code></pre><div class="blockquote"><blockquote class="blockquote"><div xmlns:jfetch="java:org.eclipse.jetty.xslt.tools.JavaSourceFetchExtension" xmlns:fetch="java:org.eclipse.jetty.xslt.tools.SourceFetchExtension" xmlns:d="http://docbook.org/ns/docbook" xmlns:l="http://docbook.sourceforge.net/xmlns/l10n/1.0" xmlns:xslthl="http://xslthl.sf.net" xmlns:gcse="http://www.google.com" xmlns:date="http://exslt.org/dates-and-times" class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title"><i class="fa fa-asterisk" aria-hidden="true"></i> Note</h3><p>The Jetty ALPN agent works with any Java 8 version. It is <span class="emphasis"><em>required</em></span> if you use
+an OpenJDK version up to <code class="literal">1.8.0_242</code> included, and it is <span class="emphasis"><em>optional</em></span> if you use an
+OpenJDK version equal or greater than <code class="literal">1.8.0_252</code>.</p></div><p>The Jetty ALPN agent can be left on the command line even when using an OpenJDK version
+equal or greater than <code class="literal">1.8.0_252</code> but we recommend to remove it from the command line
+when you use OpenJDK <code class="literal">1.8.0_252</code> or later.</p></blockquote></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="alpn-conscrypt"></a>ALPN and Conscrypt</h3></div></div></div><p>When using JDK 8 or later, you can use the <a class="link" href="https://conscrypt.org/" target="_top">Conscrypt</a> security provider to provide the ALPN service implementation.</p><p>Conscrypt binds natively to BoringSSL (a fork of OpenSSL by Google), so ALPN will be supported via the support provided by BoringSSL (bundled together with Conscrypt).</p><p>When using Jetty as a standalone server via the Jetty distribution, ALPN is enabled by enabling the <code class="literal">conscrypt</code> module.</p><p>When using Jetty embedded, ALPN is enabled by the <code class="literal">jetty-alpn-conscrypt-client</code> and <code class="literal">jetty-alpn-conscrypt-server</code> artifacts, respectively for client usage and server usage.
In addition, you also need the Conscrypt artifacts, typically the <code class="literal">org.conscrypt:conscrypt-openjdk-uber</code> artifact.
All these artifacts must be added to the classpath.</p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="alpn-jdk9"></a>ALPN and JDK 9</h3></div></div></div><p>When using JDK 9 or later and Jetty as a standalone server via the Jetty distribution, ALPN support is automatically enabled when the <code class="literal">http2</code> module is enabled.
This enables transitively the <code class="literal">alpn-9</code> module which puts the <code class="literal">jetty-alpn-java-server</code> artifact in the server classpath, providing the ALPN JDK 9 service implementation.</p><p>When using JDK 9 or later and Jetty embedded, the ALPN service implementation is provided by the <code class="literal">jetty-alpn-java-client</code> and <code class="literal">jetty-alpn-java-server</code> artifacts, respectively for client usage and server usage, and must be added to the classpath.</p><div class="section"><div class="titlepage"><div><div><h4 class="title"><a name="alpn-osgi"></a>Starting in OSGi</h4></div></div></div><p>To use ALPN in an OSGi environment, in addition to what described above, you will also need to deploy the <code class="literal">jetty-osgi-alpn</code> jar.
@@ -96,7 +120,7 @@ The solution that we use with Maven is to specify an additional command line arg
...
&lt;/project&gt;</code></pre></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="alpn-openjdk8-debugging"></a>Debugging</h3></div></div></div><p>You can enable debug logging for the ALPN implementation in this way:</p><pre class="literallayout">ALPN.debug = true;</pre><p>Since the ALPN class is in the boot classpath, we chose not to use logging libraries because we do not want to override application logging library choices; therefore the logging is performed directly on <code class="literal">System.err</code>.</p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="alpn-openjdk8-license-details"></a>License Details</h3></div></div></div><p>The ALPN implementation relies on modification of a few OpenJDK classes and on a few new classes that need to live in the <code class="literal">sun.security.ssl</code> package.
-These classes are released under the same <code class="literal">GPLv2+exception</code> license of OpenJDK.</p><p>The ALPN class and its nested classes are released under same license as the classes of the Jetty project.</p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="alpn-versions"></a>Versions</h3></div></div></div><p>The ALPN implementation, relying on modifications of OpenJDK classes, updates every time there are updates to the modified OpenJDK classes.</p><div class="table"><a name="d0e17910"></a><p class="title"><b>Table&nbsp;15.1.&nbsp;ALPN vs. OpenJDK versions</b></p><div class="table-contents"><table class="table" summary="ALPN vs. OpenJDK versions" border="1"><colgroup><col class="col_1"><col class="col_2"></colgroup><thead><tr><th align="left" valign="top">OpenJDK version</th><th align="left" valign="top">ALPN version</th></tr></thead><tbody><tr><td align="left" valign="top"><p>1.7.0u40</p></td><td align="left" valign="top"><p>7.1.0.v20141016</p></td></tr><tr><td align="left" valign="top"><p>1.7.0u45</p></td><td align="left" valign="top"><p>7.1.0.v20141016</p></td></tr><tr><td align="left" valign="top"><p>1.7.0u51</p></td><td align="left" valign="top"><p>7.1.0.v20141016</p></td></tr><tr><td align="left" valign="top"><p>1.7.0u55</p></td><td align="left" valign="top"><p>7.1.0.v20141016</p></td></tr><tr><td align="left" valign="top"><p>1.7.0u60</p></td><td align="left" valign="top"><p>7.1.0.v20141016</p></td></tr><tr><td align="left" valign="top"><p>1.7.0u65</p></td><td align="left" valign="top"><p>7.1.0.v20141016</p></td></tr><tr><td align="left" valign="top"><p>1.7.0u67</p></td><td align="left" valign="top"><p>7.1.0.v20141016</p></td></tr><tr><td align="left" valign="top"><p>1.7.0u71</p></td><td align="left" valign="top"><p>7.1.2.v20141202</p></td></tr><tr><td align="left" valign="top"><p>1.7.0u72</p></td><td align="left" valign="top"><p>7.1.2.v20141202</p></td></tr><tr><td align="left" valign="top"><p>1.7.0u75</p></td><td align="left" valign="top"><p>7.1.3.v20150130</p></td></tr><tr><td align="left" valign="top"><p>1.7.0u76</p></td><td align="left" valign="top"><p>7.1.3.v20150130</p></td></tr><tr><td align="left" valign="top"><p>1.7.0u79</p></td><td align="left" valign="top"><p>7.1.3.v20150130</p></td></tr><tr><td align="left" valign="top"><p>1.7.0u80</p></td><td align="left" valign="top"><p>7.1.3.v20150130</p></td></tr><tr><td align="left" valign="top"><p>1.8.0</p></td><td align="left" valign="top"><p>8.1.0.v20141016</p></td></tr><tr><td align="left" valign="top"><p>1.8.0u05</p></td><td align="left" valign="top"><p>8.1.0.v20141016</p></td></tr><tr><td align="left" valign="top"><p>1.8.0u11</p></td><td align="left" valign="top"><p>8.1.0.v20141016</p></td></tr><tr><td align="left" valign="top"><p>1.8.0u20</p></td><td align="left" valign="top"><p>8.1.0.v20141016</p></td></tr><tr><td align="left" valign="top"><p>1.8.0u25</p></td><td align="left" valign="top"><p>8.1.2.v20141202</p></td></tr><tr><td align="left" valign="top"><p>1.8.0u31</p></td><td align="left" valign="top"><p>8.1.3.v20150130</p></td></tr><tr><td align="left" valign="top"><p>1.8.0u40</p></td><td align="left" valign="top"><p>8.1.3.v20150130</p></td></tr><tr><td align="left" valign="top"><p>1.8.0u45</p></td><td align="left" valign="top"><p>8.1.3.v20150130</p></td></tr><tr><td align="left" valign="top"><p>1.8.0u51</p></td><td align="left" valign="top"><p>8.1.4.v20150727</p></td></tr><tr><td align="left" valign="top"><p>1.8.0u60</p></td><td align="left" valign="top"><p>8.1.5.v20150921</p></td></tr><tr><td align="left" valign="top"><p>1.8.0u65</p></td><td align="left" valign="top"><p>8.1.6.v20151105</p></td></tr><tr><td align="left" valign="top"><p>1.8.0u66</p></td><td align="left" valign="top"><p>8.1.6.v20151105</p></td></tr><tr><td align="left" valign="top"><p>1.8.0u71</p></td><td align="left" valign="top"><p>8.1.7.v20160121</p></td></tr><tr><td align="left" valign="top"><p>1.8.0u72</p></td><td align="left" valign="top"><p>8.1.7.v20160121</p></td></tr><tr><td align="left" valign="top"><p>1.8.0u73</p></td><td align="left" valign="top"><p>8.1.7.v20160121</p></td></tr><tr><td align="left" valign="top"><p>1.8.0u74</p></td><td align="left" valign="top"><p>8.1.7.v20160121</p></td></tr><tr><td align="left" valign="top"><p>1.8.0u77</p></td><td align="left" valign="top"><p>8.1.7.v20160121</p></td></tr><tr><td align="left" valign="top"><p>1.8.0u91</p></td><td align="left" valign="top"><p>8.1.7.v20160121</p></td></tr><tr><td align="left" valign="top"><p>1.8.0u92</p></td><td align="left" valign="top"><p>8.1.8.v20160420</p></td></tr><tr><td align="left" valign="top"><p>1.8.0u101</p></td><td align="left" valign="top"><p>8.1.9.v20160720</p></td></tr><tr><td align="left" valign="top"><p>1.8.0u102</p></td><td align="left" valign="top"><p>8.1.9.v20160720</p></td></tr><tr><td align="left" valign="top"><p>1.8.0u111</p></td><td align="left" valign="top"><p>8.1.9.v20160720</p></td></tr><tr><td align="left" valign="top"><p>1.8.0u112</p></td><td align="left" valign="top"><p>8.1.10.v20161026</p></td></tr><tr><td align="left" valign="top"><p>1.8.0u121</p></td><td align="left" valign="top"><p>8.1.11.v20170118</p></td></tr><tr><td align="left" valign="top"><p>1.8.0u131</p></td><td align="left" valign="top"><p>8.1.11.v20170118</p></td></tr><tr><td align="left" valign="top"><p>1.8.0u141</p></td><td align="left" valign="top"><p>8.1.11.v20170118</p></td></tr><tr><td align="left" valign="top"><p>1.8.0u144</p></td><td align="left" valign="top"><p>8.1.11.v20170118</p></td></tr><tr><td align="left" valign="top"><p>1.8.0u151</p></td><td align="left" valign="top"><p>8.1.11.v20170118</p></td></tr><tr><td align="left" valign="top"><p>1.8.0u152</p></td><td align="left" valign="top"><p>8.1.11.v20170118</p></td></tr><tr><td align="left" valign="top"><p>1.8.0u161</p></td><td align="left" valign="top"><p>8.1.12.v20180117</p></td></tr><tr><td align="left" valign="top"><p>1.8.0u162</p></td><td align="left" valign="top"><p>8.1.12.v20180117</p></td></tr><tr><td align="left" valign="top"><p>1.8.0u171</p></td><td align="left" valign="top"><p>8.1.12.v20180117</p></td></tr><tr><td align="left" valign="top"><p>1.8.0u172</p></td><td align="left" valign="top"><p>8.1.12.v20180117</p></td></tr><tr><td align="left" valign="top"><p>1.8.0u181</p></td><td align="left" valign="top"><p>8.1.12.v20180117</p></td></tr><tr><td align="left" valign="top"><p>1.8.0u191</p></td><td align="left" valign="top"><p>8.1.13.v20181017</p></td></tr><tr><td align="left" valign="top"><p>1.8.0u192</p></td><td align="left" valign="top"><p>8.1.13.v20181017</p></td></tr><tr><td align="left" valign="top"><p>1.8.0u201</p></td><td align="left" valign="top"><p>8.1.13.v20181017</p></td></tr><tr><td align="left" valign="top"><p>1.8.0u202</p></td><td align="left" valign="top"><p>8.1.13.v20181017</p></td></tr><tr><td align="left" valign="top"><p>1.8.0u211<sup>[1]</sup></p></td><td align="left" valign="top"><p>8.1.13.v20181017</p></td></tr><tr><td align="left" valign="top"><p>1.8.0u212</p></td><td align="left" valign="top"><p>8.1.13.v20181017</p></td></tr><tr><td align="left" valign="top"><p>1.8.0u221<sup>[1]</sup></p></td><td align="left" valign="top"><p>8.1.13.v20181017</p></td></tr><tr><td align="left" valign="top"><p>1.8.0u222</p></td><td align="left" valign="top"><p>8.1.13.v20181017</p></td></tr><tr><td align="left" valign="top"><p>1.8.0u231<sup>[1]</sup></p></td><td align="left" valign="top"><p>8.1.13.v20181017</p></td></tr><tr><td align="left" valign="top"><p>1.8.0u232</p></td><td align="left" valign="top"><p>8.1.13.v20181017</p></td></tr><tr><td align="left" valign="top"><p>1.8.0u241<sup>[1]</sup></p></td><td align="left" valign="top"><p>8.1.13.v20181017</p></td></tr><tr><td align="left" valign="top"><p>1.8.0u242</p></td><td align="left" valign="top"><p>8.1.13.v20181017</p></td></tr></tbody></table></div></div><br class="table-break"><p><sup>[1]</sup> These are Oracle releases for which the source code is not available,
+These classes are released under the same <code class="literal">GPLv2+exception</code> license of OpenJDK.</p><p>The ALPN class and its nested classes are released under same license as the classes of the Jetty project.</p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="alpn-versions"></a>Versions</h3></div></div></div><p>The ALPN implementation, relying on modifications of OpenJDK classes, updates every time there are updates to the modified OpenJDK classes.</p><div class="table"><a name="d0e17997"></a><p class="title"><b>Table&nbsp;15.1.&nbsp;ALPN vs. OpenJDK versions</b></p><div class="table-contents"><table class="table" summary="ALPN vs. OpenJDK versions" border="1"><colgroup><col class="col_1"><col class="col_2"></colgroup><thead><tr><th align="left" valign="top">OpenJDK version</th><th align="left" valign="top">ALPN version</th></tr></thead><tbody><tr><td align="left" valign="top"><p>1.7.0u40</p></td><td align="left" valign="top"><p>7.1.0.v20141016</p></td></tr><tr><td align="left" valign="top"><p>1.7.0u45</p></td><td align="left" valign="top"><p>7.1.0.v20141016</p></td></tr><tr><td align="left" valign="top"><p>1.7.0u51</p></td><td align="left" valign="top"><p>7.1.0.v20141016</p></td></tr><tr><td align="left" valign="top"><p>1.7.0u55</p></td><td align="left" valign="top"><p>7.1.0.v20141016</p></td></tr><tr><td align="left" valign="top"><p>1.7.0u60</p></td><td align="left" valign="top"><p>7.1.0.v20141016</p></td></tr><tr><td align="left" valign="top"><p>1.7.0u65</p></td><td align="left" valign="top"><p>7.1.0.v20141016</p></td></tr><tr><td align="left" valign="top"><p>1.7.0u67</p></td><td align="left" valign="top"><p>7.1.0.v20141016</p></td></tr><tr><td align="left" valign="top"><p>1.7.0u71</p></td><td align="left" valign="top"><p>7.1.2.v20141202</p></td></tr><tr><td align="left" valign="top"><p>1.7.0u72</p></td><td align="left" valign="top"><p>7.1.2.v20141202</p></td></tr><tr><td align="left" valign="top"><p>1.7.0u75</p></td><td align="left" valign="top"><p>7.1.3.v20150130</p></td></tr><tr><td align="left" valign="top"><p>1.7.0u76</p></td><td align="left" valign="top"><p>7.1.3.v20150130</p></td></tr><tr><td align="left" valign="top"><p>1.7.0u79</p></td><td align="left" valign="top"><p>7.1.3.v20150130</p></td></tr><tr><td align="left" valign="top"><p>1.7.0u80</p></td><td align="left" valign="top"><p>7.1.3.v20150130</p></td></tr><tr><td align="left" valign="top"><p>1.8.0</p></td><td align="left" valign="top"><p>8.1.0.v20141016</p></td></tr><tr><td align="left" valign="top"><p>1.8.0u05</p></td><td align="left" valign="top"><p>8.1.0.v20141016</p></td></tr><tr><td align="left" valign="top"><p>1.8.0u11</p></td><td align="left" valign="top"><p>8.1.0.v20141016</p></td></tr><tr><td align="left" valign="top"><p>1.8.0u20</p></td><td align="left" valign="top"><p>8.1.0.v20141016</p></td></tr><tr><td align="left" valign="top"><p>1.8.0u25</p></td><td align="left" valign="top"><p>8.1.2.v20141202</p></td></tr><tr><td align="left" valign="top"><p>1.8.0u31</p></td><td align="left" valign="top"><p>8.1.3.v20150130</p></td></tr><tr><td align="left" valign="top"><p>1.8.0u40</p></td><td align="left" valign="top"><p>8.1.3.v20150130</p></td></tr><tr><td align="left" valign="top"><p>1.8.0u45</p></td><td align="left" valign="top"><p>8.1.3.v20150130</p></td></tr><tr><td align="left" valign="top"><p>1.8.0u51</p></td><td align="left" valign="top"><p>8.1.4.v20150727</p></td></tr><tr><td align="left" valign="top"><p>1.8.0u60</p></td><td align="left" valign="top"><p>8.1.5.v20150921</p></td></tr><tr><td align="left" valign="top"><p>1.8.0u65</p></td><td align="left" valign="top"><p>8.1.6.v20151105</p></td></tr><tr><td align="left" valign="top"><p>1.8.0u66</p></td><td align="left" valign="top"><p>8.1.6.v20151105</p></td></tr><tr><td align="left" valign="top"><p>1.8.0u71</p></td><td align="left" valign="top"><p>8.1.7.v20160121</p></td></tr><tr><td align="left" valign="top"><p>1.8.0u72</p></td><td align="left" valign="top"><p>8.1.7.v20160121</p></td></tr><tr><td align="left" valign="top"><p>1.8.0u73</p></td><td align="left" valign="top"><p>8.1.7.v20160121</p></td></tr><tr><td align="left" valign="top"><p>1.8.0u74</p></td><td align="left" valign="top"><p>8.1.7.v20160121</p></td></tr><tr><td align="left" valign="top"><p>1.8.0u77</p></td><td align="left" valign="top"><p>8.1.7.v20160121</p></td></tr><tr><td align="left" valign="top"><p>1.8.0u91</p></td><td align="left" valign="top"><p>8.1.7.v20160121</p></td></tr><tr><td align="left" valign="top"><p>1.8.0u92</p></td><td align="left" valign="top"><p>8.1.8.v20160420</p></td></tr><tr><td align="left" valign="top"><p>1.8.0u101</p></td><td align="left" valign="top"><p>8.1.9.v20160720</p></td></tr><tr><td align="left" valign="top"><p>1.8.0u102</p></td><td align="left" valign="top"><p>8.1.9.v20160720</p></td></tr><tr><td align="left" valign="top"><p>1.8.0u111</p></td><td align="left" valign="top"><p>8.1.9.v20160720</p></td></tr><tr><td align="left" valign="top"><p>1.8.0u112</p></td><td align="left" valign="top"><p>8.1.10.v20161026</p></td></tr><tr><td align="left" valign="top"><p>1.8.0u121</p></td><td align="left" valign="top"><p>8.1.11.v20170118</p></td></tr><tr><td align="left" valign="top"><p>1.8.0u131</p></td><td align="left" valign="top"><p>8.1.11.v20170118</p></td></tr><tr><td align="left" valign="top"><p>1.8.0u141</p></td><td align="left" valign="top"><p>8.1.11.v20170118</p></td></tr><tr><td align="left" valign="top"><p>1.8.0u144</p></td><td align="left" valign="top"><p>8.1.11.v20170118</p></td></tr><tr><td align="left" valign="top"><p>1.8.0u151</p></td><td align="left" valign="top"><p>8.1.11.v20170118</p></td></tr><tr><td align="left" valign="top"><p>1.8.0u152</p></td><td align="left" valign="top"><p>8.1.11.v20170118</p></td></tr><tr><td align="left" valign="top"><p>1.8.0u161</p></td><td align="left" valign="top"><p>8.1.12.v20180117</p></td></tr><tr><td align="left" valign="top"><p>1.8.0u162</p></td><td align="left" valign="top"><p>8.1.12.v20180117</p></td></tr><tr><td align="left" valign="top"><p>1.8.0u171</p></td><td align="left" valign="top"><p>8.1.12.v20180117</p></td></tr><tr><td align="left" valign="top"><p>1.8.0u172</p></td><td align="left" valign="top"><p>8.1.12.v20180117</p></td></tr><tr><td align="left" valign="top"><p>1.8.0u181</p></td><td align="left" valign="top"><p>8.1.12.v20180117</p></td></tr><tr><td align="left" valign="top"><p>1.8.0u191</p></td><td align="left" valign="top"><p>8.1.13.v20181017</p></td></tr><tr><td align="left" valign="top"><p>1.8.0u192</p></td><td align="left" valign="top"><p>8.1.13.v20181017</p></td></tr><tr><td align="left" valign="top"><p>1.8.0u201</p></td><td align="left" valign="top"><p>8.1.13.v20181017</p></td></tr><tr><td align="left" valign="top"><p>1.8.0u202</p></td><td align="left" valign="top"><p>8.1.13.v20181017</p></td></tr><tr><td align="left" valign="top"><p>1.8.0u211<sup>[1]</sup></p></td><td align="left" valign="top"><p>8.1.13.v20181017</p></td></tr><tr><td align="left" valign="top"><p>1.8.0u212</p></td><td align="left" valign="top"><p>8.1.13.v20181017</p></td></tr><tr><td align="left" valign="top"><p>1.8.0u221<sup>[1]</sup></p></td><td align="left" valign="top"><p>8.1.13.v20181017</p></td></tr><tr><td align="left" valign="top"><p>1.8.0u222</p></td><td align="left" valign="top"><p>8.1.13.v20181017</p></td></tr><tr><td align="left" valign="top"><p>1.8.0u231<sup>[1]</sup></p></td><td align="left" valign="top"><p>8.1.13.v20181017</p></td></tr><tr><td align="left" valign="top"><p>1.8.0u232</p></td><td align="left" valign="top"><p>8.1.13.v20181017</p></td></tr><tr><td align="left" valign="top"><p>1.8.0u241<sup>[1]</sup></p></td><td align="left" valign="top"><p>8.1.13.v20181017</p></td></tr><tr><td align="left" valign="top"><p>1.8.0u242</p></td><td align="left" valign="top"><p>8.1.13.v20181017</p></td></tr><tr><td align="left" valign="top"><p>1.8.0u252 and later</p></td><td align="left" valign="top"><p>NOT NECESSARY</p></td></tr></tbody></table></div></div><br class="table-break"><p><sup>[1]</sup> These are Oracle releases for which the source code is not available,
or it is unclear what exactly is because there is no correspondent tag in
the OpenJDK repository.
We assume that the source code for these releases is equivalent (at least
@@ -110,4 +134,4 @@ $ ./get_source.sh</pre></div><p>To update the source to a specific tag, use the
</script><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="jetty-jconsole.html"><i class="fa fa-chevron-left" aria-hidden="true"></i> Previous</a>&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="jetty-admin-guide.html"><i class="fa fa-chevron-up" aria-hidden="true"></i> Top</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="http2.html">Next <i class="fa fa-chevron-right" aria-hidden="true"></i></a></td></tr><tr><td width="40%" align="left" valign="top">Managing Jetty with JConsole and JMC&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html"><i class="fa fa-home" aria-hidden="true"></i> Home</a></td><td width="40%" align="right" valign="top">&nbsp;Chapter&nbsp;16.&nbsp;HTTP/2</td></tr></table></div><p xmlns:jfetch="java:org.eclipse.jetty.xslt.tools.JavaSourceFetchExtension" xmlns:fetch="java:org.eclipse.jetty.xslt.tools.SourceFetchExtension" xmlns:d="http://docbook.org/ns/docbook" xmlns:l="http://docbook.sourceforge.net/xmlns/l10n/1.0" xmlns:xslthl="http://xslthl.sf.net" xmlns:gcse="http://www.google.com" xmlns:date="http://exslt.org/dates-and-times"><div class="jetty-callout">
See an error or something missing?
<span class="callout"><a href="http://github.com/eclipse/jetty.project">Contribute to this documentation at
- <span class="website"><i class="fa fa-github" aria-hidden="true"></i> Github!</span></a></span><span style="float: right"><i>(Generated: 2020-03-17)</i></span></div></p></body></html> \ No newline at end of file
+ <span class="website"><i class="fa fa-github" aria-hidden="true"></i> Github!</span></a></span><span style="float: right"><i>(Generated: 2020-03-19)</i></span></div></p></body></html> \ No newline at end of file

Back to the top