anchor.diff:  
   [NOTE]
   ====
  -Spring Boot does not support `h2c`, the cleartext version of the HTTP/2 protocol.
  -So you must <<howto-configure-ssl, configure SSL first>>.
  +Spring Boot does not advise using `h2c`, the cleartext version of the HTTP/2 protocol.
  +As a result, the next sections require to <<howto-configure-ssl, configure SSL first>>.
  +If you still choose to use `h2c`, you can check <<howto-configure-http2-h2c, the dedicated section>>.
   ====
   
   
  -
  -[[howto-configure-http2-undertow]]
  -==== HTTP/2 with Undertow
  -As of Undertow 1.4.0+, HTTP/2 is supported without any additional requirement on JDK8.
  +[[howto-configure-http2-tomcat]]
  +==== HTTP/2 with Tomcat
  +Spring Boot ships by default with Tomcat 9.0.x which supports HTTP/2 out of the box when using JDK 9 or later.
  +Alternatively, HTTP/2 can be used on JDK 8 if the `libtcnative` library and its dependencies are installed on the host operating system.
  +
  +The library folder must be made available, if not already, to the JVM library path.
  +You can do so with a JVM argument such as `-Djava.library.path=/usr/local/opt/tomcat-native/lib`.
  +More on this in the https://tomcat.apache.org/tomcat-9.0-doc/apr.html[official Tomcat documentation].
  +
  +Starting Tomcat 9.0.x on JDK 8 without that native support logs the following error:
  +
  +[indent=0,subs="attributes"]
  +----
  +	ERROR 8787 --- [           main] o.a.coyote.http11.Http11NioProtocol      : The upgrade handler [org.apache.coyote.http2.Http2Protocol] for [h2] only supports upgrade via ALPN but has been configured for the ["https-jsse-nio-8443"] connector that does not support ALPN.
  +----
  +
  +This error is not fatal, and the application still starts with HTTP/1.1 SSL support.
   
   
   
  
positive.code: ==== HTTP/2 with Jetty
  As of Jetty 9.4.8, HTTP/2 is also supported with the https://www.conscrypt.org/[Conscrypt library].
  To enable that support, your application needs to have two additional dependencies: `org.eclipse.jetty:jetty-alpn-conscrypt-server` and `org.eclipse.jetty.http2:http2-server`.
  
  
  
  [[howto-configure-http2-tomcat]]
  ==== HTTP/2 with Tomcat
  Spring Boot ships by default with Tomcat 9.0.x which supports HTTP/2 out of the box when using JDK 9 or later.
  Alternatively, HTTP/2 can be used on JDK 8 if the `libtcnative` library and its dependencies are installed on the host operating system.
  
  The library folder must be made available, if not already, to the JVM library path.
  You can do so with a JVM argument such as `-Djava.library.path=/usr/local/opt/tomcat-native/lib`.
  More on this in the https://tomcat.apache.org/tomcat-9.0-doc/apr.html[official Tomcat documentation].
  
  Starting Tomcat 9.0.x on JDK 8 without that native support logs the following error:
  
  [indent=0,subs="attributes"]
  ----
  	ERROR 8787 --- [           main] o.a.coyote.http11.Http11NioProtocol      : The upgrade handler [org.apache.coyote.http2.Http2Protocol] for [h2] only supports upgrade via ALPN but has been configured for the ["https-jsse-nio-8443"] connector that does not support ALPN.
  ----
  
  This error is not fatal, and the application still starts with HTTP/1.1 SSL support.
  
  
  
  
negative.code: 
  Spring Boot manages the version for the `io.netty:netty-tcnative-boringssl-static` "uber jar", containing native libraries for all platforms.
  Developers can choose to import only the required dependencies using a classifier (see https://netty.io/wiki/forked-tomcat-native.html[the Netty official documentation]).
  
  
  
  [[howto-configure-http2-undertow]]
  ==== HTTP/2 with Undertow
  As of Undertow 1.4.0+, HTTP/2 is supported without any additional requirement on JDK8.
  
  
  
  [[howto-configure-http2-h2c]]
  ==== h2c with supported servers
  To enable `h2c`, you need to leave the configprop:server.http2.enabled[] property set to `false`,
  and instead apply a customizer specific to your choice of server:
  
  For Tomcat, we need to add an upgrade protocol:
  
  [source,java,indent=0,subs="verbatim,quotes,attributes"]
  ----
  	@Bean
  	public TomcatConnectorCustomizer connectorCustomizer() {
  		return (connector) -> connector.addUpgradeProtocol(new Http2Protocol());
  	}
  ----
  
  For Jetty, we need to add a connection factory to the existing connector:
  
  [source,java,indent=0,subs="verbatim,quotes,attributes"]
  ----
  	@Bean
  	public JettyServerCustomizer serverCustomizer() {
  		return (server) -> {
  			HttpConfiguration configuration = new HttpConfiguration();
  			configuration.setSendServerVersion(false);
  			Arrays.stream(server.getConnectors())
  					.filter(connector -> connector instanceof ServerConnector)
  					.map(ServerConnector.class::cast)
  					.forEach(connector -> {
  						connector.addConnectionFactory(new HTTP2CServerConnectionFactory(configuration));
  					});
  		};
  	}
  ----
  
  For Netty, we need to add `h2c` as a supported protocol:
  
  [source,java,indent=0,subs="verbatim,quotes,attributes"]
  ----
  	@Bean
  	public NettyServerCustomizer serverCustomizer() {
  		return (server) -> server.protocol(HttpProtocol.H2C);
  	}
  ----
  
  For Undertow, we need to enable the HTTP2 option:
  
  [source,java,indent=0,subs="verbatim,quotes,attributes"]
  ----
  	@Bean
  	public UndertowBuilderCustomizer builderCustomizer() {
  		return (builder) -> {
  			builder.setServerOption(ENABLE_HTTP2, true);
  		};
  	}
  ----
  
  
  
  
  