Spring应用程序和外部Tomcat服务器HTTP2

huwehgph  于 2023-01-09  发布在  Spring
关注(0)|答案(1)|浏览(166)

当我在一个外部的tomcat服务器上部署一个spring boot应用程序时,我需要在tomcat服务器上配置HTTP2以及我的spring boot应用程序吗?当我通过浏览器或任何其他客户端(比如Postman)调用部署在Tomcat中的spring应用程序时,我对通信是如何发生的有点困惑。
我已经在Tomcat上启用了HTTP2并进行了验证:

0:0:0:0:0:0:0:1 - - [08/Jan/2023:18:28:44 +0530] "GET / HTTP/2.0" 200 11408
0:0:0:0:0:0:0:1 - - [08/Jan/2023:18:28:44 +0530] "GET /tomcat.svg HTTP/2.0" 200 68761
0:0:0:0:0:0:0:1 - - [08/Jan/2023:18:28:44 +0530] "GET /tomcat.css HTTP/2.0" 200 5895

并且我已经使用本link中提到的步骤将我的Spring Boot应用程序配置为使用HTTP2
当我调用部署在外部Tomcat中的RestController时,仍然得到HTTP 1.1

127.0.0.1 - - [08/Jan/2023:23:41:26 +0530] "HEAD /demo-0.0.1-SNAPSHOT/ HTTP/1.1" 200 -
127.0.0.1 - - [08/Jan/2023:23:41:51 +0530] "HEAD /demo-0.0.1-SNAPSHOT/getMessage HTTP/1.1" 200 -

其中demo-0.0.1-SNAPSHOT是部署的工件。
我使用curl进行了相同验证

HTTP/1.1 200
Content-Type: text/plain;charset=UTF-8
Content-Length: 41
Date: Sun, 08 Jan 2023 18:11:51 GMT

我错过了什么?
我的application.properties文件看起来像:

# configuring SSL
server.port=8443
server.ssl.key-store-type=pkcs12
server.ssl.key-store=classpath:springboot.p12
server.ssl.key-store-password=password
server.ssl.key-alias=springboot

# enabling http2
server.http2.enabled=true

我已经使用以下命令正确地创建了Keystore

keytool -genkeypair -alias springboot -keyalg RSA -keysize 4096 -storetype PKCS12 -keystore springboot.p12 -validity 3650 -storepass password

3htmauhk

3htmauhk1#

Tomcat作为独立服务器,默认情况下在其sever.xml中禁用了http 2的连接器。

Sping Boot 2,最高支持Tomcat 9

如果这是作为war应用程序部署的spring boot 2,则最多可以使用Tomcat 9
您必须在部署的服务器conf目录下找到http2的Tomcat 9(Server.xml)连接器,并取消注解此连接器,同时还要提供必要的证书文件。
您需要取消注解

<Connector port="8443" protocol="org.apache.coyote.http11.Http11AprProtocol"
               maxThreads="150" SSLEnabled="true" >
        <UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />
        <SSLHostConfig>
            <Certificate certificateKeyFile="conf/localhost-rsa-key.pem"
                         certificateFile="conf/localhost-rsa-cert.pem"
                         certificateChainFile="conf/localhost-rsa-chain.pem"
                         type="RSA" />
        </SSLHostConfig>
    </Connector>

Sping Boot 3、Tomcat 10或更高版本

如果您将spring boot 3部署为war应用程序,则应该使用Tomcat 10或更高版本。
您必须在部署的服务器conf目录下找到http2的Tomcat 10(Server.xml)连接器并取消注解,同时提供必要的证书文件。

<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
               maxThreads="150" SSLEnabled="true">
        <UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />
        <SSLHostConfig>
            <Certificate certificateKeystoreFile="conf/localhost-rsa.jks"
                         type="RSA" />
        </SSLHostConfig>
    </Connector>

相关问题