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

San*_*eev 5 spring-boot http2 tomcat9

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

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
Run Code Online (Sandbox Code Playgroud)

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

http 2.0 是否支持无 SSL (https)。如果支持的话如何配置?

Bar*_*ard 3

浏览器仅支持基于 SSL/TLS 的 HTTP/2。这是出于实际和意识形态的原因。

\n\n

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

\n\n

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

\n\n

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

\n\n
curl --http2-prior-knowledge -v http://www.example.com\n
Run Code Online (Sandbox Code Playgroud)\n\n

尽管如果您确实希望通过浏览器访问此测试,则此测试的实用性值得商榷。

\n