我已使用application.property文件中的以下配置在Spring boot 2.1.2中启用了HTTP 2.0,并使用SSL启用了Tomcat-
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。
http 2.0是否支持没有SSL(https)的内容。如果支持,如何配置?
答案 0 :(得分: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。与通常运行浏览器的开放式Internet相比,您更能控制这种流量。因此,您可以使用curl测试您的设置,例如检查未加密的HTTP / 2是否有效(假设您具有此支持的最新版本的curl):
curl --http2-prior-knowledge -v http://www.example.com
尽管您确实希望此测试可用于浏览器访问,但是该测试的有用性值得商。