配置HTTP / 2
您可以使用server.http2.enabled
配置属性在Spring Boot应用程序中启用HTTP / 2支持 。此支持取决于所选的Web服务器和应用程序环境,因为JDK8不支持该协议。
Spring Boot不支持
h2c
HTTP / 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官方文档)。