如何在没有 SSL 配置的情况下使用 spring boot 和 tomcat 启用 http2

Posted

技术标签:

【中文标题】如何在没有 SSL 配置的情况下使用 spring boot 和 tomcat 启用 http2【英文标题】:How to enable http2 using spring boot and tomcat without SSL configuration 【发布时间】:2019-06-24 12:40:32 【问题描述】:

我已经在 Spring boot 2.1.2 和 Tomcat 中启用了 HTTP 2.0,并使用 application.property 文件中的以下配置启用了 SSL -

server.port=8443
server.http2.enabled=true
security.require-ssl=true
server.ssl.key-store-type=PKCS12
server.ssl.key-store=classpath:.keystore
server.ssl.key-store-password=xxxxxx
erver.ssl.key-alias=test

它工作正常,我可以看到 http 版本打印为“HTTP/2.0”,并且在 Chrome DevTool 中也显示了 h2。但是在禁用 SSL 时,http 版本变为 1.1。

是否支持不带 SSL (https) 的 http 2.0。如果支持,如何配置?

【问题讨论】:

***.com/a/43207609/1352127。可能重复。 【参考方案1】:

Browsers only support HTTP/2 over SSL/TLS。这既有实际的原因,也有意识形态的原因。

在实际方面,将数据包包装在 HTTPS 中可以大大降低不支持 HTTP/2 的基础设施无法应对新协议的可能性。微软是唯一一个表示他们将允许未加密的 HTTP/2 的浏览器,但即使他们最终也没有(显然是在看到连接错误之后)。 HTTP/2 也可以作为 TLS 握手的一部分进行协商,从而节省升级到 HTTP/2 的时间。

在意识形态方面,出于安全和隐私原因,所有网络流量都应该加密,因此浏览器鼓励使用 HTTPS(或者更准确地说,它们不鼓励使用普通 HTTP)但限制对某些新功能的访问仅像 HTTP/2 到 HTTPS 连接。

即使浏览器仅支持基于 HTTPS 的 HTTP/2,协议本身也没有强制要求。例如,如果您在边缘节点终止 HTTPS,这将允许在后端连接上使用 HTTP/2。与浏览器通常运行的开放互联网相比,您更能控制这种流量的想法。因此,您可以使用 curl 测试您的设置,例如检查未加密的 HTTP/2 是否有效(假设您拥有支持此支持的最新版本的 curl):

curl --http2-prior-knowledge -v http://www.example.com

如果您确实希望将其用于浏览器访问,但该测试的实用性值得商榷。

【讨论】:

以上是关于如何在没有 SSL 配置的情况下使用 spring boot 和 tomcat 启用 http2的主要内容,如果未能解决你的问题,请参考以下文章

如何在没有spring boot的情况下使用spring批处理的java配置?

启用了 ssl 的 spring mvc - 没有可用的会话属性

如何在没有 persistence.xml 的情况下配置 Spring?

如何在没有 spring-boot 的情况下在 spring-webflux 中加载配置?

如何在没有 SSL 的情况下使用刷新令牌刷新谷歌访问令牌?

如何在没有可信 SSL 证书的情况下在 Intranet 中运行 PWA?