Tomcat 9.0.16 Java 11 HTTP / 2

问题描述 投票:1回答:2

TLS仍然是在最新的Java和Tomcat上使用HTTP / 2的先决条件吗?我可以将<UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol"/>添加到HTTP端口8080并期望HTTP / 2工作吗?如何实际测试/看到实际使用HTTP / 2而不是HTTP?任何命令行/浏览器工具?谢谢。

java tomcat configuration tls1.2 http2
2个回答
1
投票

正如HTTP Connector howto所述:

HTTP / 2是通过HTTP升级(h2c)和直接HTTP / 2(h2c)连接为TLS(h2),非TLS提供支持。要为HTTP连接器启用HTTP / 2支持,必须将以下UpgradeProtocol元素嵌套在具有className属性org.apache.coyote.http2.Http2Protocol的Connector中。

这表明TLS不是必需的。问题仍然是您的浏览器是否支持h2c升级。

使用Firefox,按(F12)打开开发人员工具,导航到Networkanalysis。在那里,您会看到一个表格,其中显示了每个请如果不存在,请添加“协议”列,该列告诉您是否正在为每个请求使用HTTP / 1,h2c或任何其他协议。 Chrome还以类似的方式提供协议信息:

只需右键单击开发人员工具“网络”部分中的列,即可获得所有可用列的概述:

enter image description here

客户端使用的调试协议的另一种替代方法是访问记录。只需在context.xhtml的默认ROOT webapp中创建一个\apache-tomcat\webapps\ROOT\META-INF\,其内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<Context>
  <Valve className="org.apache.catalina.valves.AccessLogValve"/>
</Context>

重新启动Tomcat并执行一些请求后,您将找到一个\apache-tomcat\logs\localhost_access_log.2019-03-12.txt,它准确地说明了每个请求使用的协议:

... - - [12/Mar/2019...] "GET / HTTP/1.1" 200 11488
... - - [12/Mar/2019...] "GET / HTTP/1.1" 200 11488
... - - [12/Mar/2019...] "GET / HTTP/2.0" 200 11468

在我的情况下,第一次请求使用Chrome和Firefox完成,第三次请求是使用您在其他答案中编写的命令curl -v --http2 localhost:8080完成的。


1
投票

在应用UpgradeProtocol并重新启动Tomcat服务器后,您可以使用curl -v --http2 localhost:8080检查操作。

© www.soinside.com 2019 - 2024. All rights reserved.