如何在spring boot应用程序中启用http2|http压缩示例

1,549 阅读2分钟

在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.propertiesyaml 文件中添加以下属性

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配置。