在spring boot应用程序中设置http2需要以下东西
如你所知,最新的浏览器支持带有SSL/TLS配置的http2:
- 春天启动
- maven或gradle
以下是在2.0和1.5版本的spring boot中进行配置的步骤
创建和配置http SSL证书
要设置http2,首先你需要配置SSL配置
从供应商那里获得证书或自己的证书,我有从供应商那里获得的crt和key文件。
openssl pkcs12 -export -out my_file.p12 -inkey my_key.key -in my_certificate.crt -password pass:secret
这将创建一个p12文件
如果你创建的是基本的自签名证书,你仍然可以跳过上述步骤。
首先从p12文件生成钥匙库文件
keytool -import -trustcacerts -alias server -file my_file.p7b -keystore my_keystore.jks
它要求输入密码
一旦密钥库生成,你必须在spring boot应用程序中配置http2。
在spring boot2.x版本中,在spring boot应用程序中配置http2很简单。
Spring boot2.x内置的Tomcat 9.x版本默认支持http2。
从tomcat 8.5版本开始支持HTTP2。你可以查看更多关于在Tomcat中启用http2的信息
在application.properties 或yaml 文件中添加以下属性
server.http2.enabled=true
server.port = 8443
server.ssl.key-store=classpath:my_keystore.jks
server.ssl.key-store-password=secretpassword
然后用以下方法重新启动应用程序
mvn spring-boot:run
如果你使用Gradle包装器,你可以使用以下命令
gradlew bootRun
这将创建一个默认的嵌入式Tomcat服务器,并在Java9版本中配置了http2。
让我们看看如何用spring boot 1.5和java 8版本定制http2。
对于spring boot 1.5.x
这适用于java8版本。在这个版本中,server.http2.enabled ,所以你必须通过编程来编写。
@Bean
public ConfigurableServletWebServerFactory tomcatCustomizer() {
TomcatServletWebServerFactory tomcatWebserverFactory = new TomcatServletWebServerFactory();
tomcatWebserverFactory.addConnectorCustomizers(connector -> connector.addUpgradeProtocol(new Http2Protocol()));
return tomcatWebserverFactory;
}
默认情况下,嵌入式服务器是不压缩的。
打开application.properties来启用压缩。
server.compression.enabled=true
响应必须至少有2MB大小才能压缩数据,但你也可以用字节来配置server.compression.min-response-size 。
server.compression.min-response-size=4096
你可以用以下方法配置压缩响应的类型server.compression.mime-types
server.compression.mime-types
首先在maven项目的pom.xml中配置jetty的依赖关系。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-alpn-server</artifactId>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-alpn-conscrypt-server</artifactId>
</dependency>
<dependency>
<groupId>org.eclipse.jetty.http2</groupId>
<artifactId>http2-server</artifactId>
</dependency>
你也可以在gradle项目中进行同样的配置
下一步配置
server.http2.enabled=true
这个配置默认为jetty服务器的http配置。