配置HTTP / 2

您可以使用server.http2.enabled配置属性在Spring Boot应用程序中启用HTTP / 2支持 。此支持取决于所选的Web服务器和应用程序环境,因为JDK8不支持该协议。

Spring Boot不支持h2cHTTP / 2协议的明文版本。因此,您必须先配置SSL

Undertow的HTTP / 2

从Undertow 1.4.0+开始,支持HTTP / 2,对JDK8没有任何额外要求。

Jetty的HTTP / 2

从Jetty 9.4.8开始,Conscrypt库也支持HTTP / 2 。要启用该支持,您的应用程序需要有两个额外的依赖项:

  • org.eclipse.jetty:jetty-alpn-conscrypt-server

  • org.eclipse.jetty.http2:http2-server

Tomcat的HTTP / 2

Spring Boot默认使用Tomcat 9.0.x,它在使用JDK 9或更高版本时支持HTTP / 2开箱即用。或者,如果libtcnative 库及其依赖项安装在主机操作系统上,则可以在JDK 8上使用HTTP / 2 。

必须使库文件夹(如果尚未可用)到JVM库路径。您可以使用JVM参数来完成此操作 -Djava.library.path=/usr/local/opt/tomcat-native/lib。有关Tomcat官方文档的更多 信息

在没有该本机支持的情况下在JDK 8上启动Tomcat 9.0.x会记录以下错误:

1
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 beenconfigured for the ["https-jsse-nio-8443"] connector that does not support ALPN.

此错误不是致命错误,应用程序仍以HTTP / 1.1 SSL支持启动。

Reactor Netty的HTTP / 2

spring-boot-webflux-starter默认情况下,反应堆的Netty作为服务器使用。可以使用JDK 9或更高版本的JDK支持为Reactor Netty配置HTTP / 2。对于JDK 8环境或最佳运行时性能,此服务器还支持具有本机库的HTTP / 2。要启用它,您的应用程序需要具有其他依赖项。

Spring Boot管理io.netty:netty-tcnative-boringssl-static“超级jar” 的版本 ,包含所有平台的本机库。开发人员可以选择使用分类器仅导入所需的依赖项(请参阅Netty官方文档)。