Tomcat 9.0.16 Java 11 HTTP/2

Tomcat 9.0.16 Java 11 HTTP/2,java,tomcat,configuration,tls1.2,http2,Java,Tomcat,Configuration,Tls1.2,Http2,TLS仍然是在最新的Java和Tomcat上使用HTTP/2的先决条件吗?我可以将添加到HTTP端口8080并期望HTTP/2正常工作吗?如何实际测试/查看HTTP/2是否被实际使用而不是HTTP?有命令行/浏览器工具吗?谢谢。美国: HTTP/2是通过HTTP升级为TLS(h2)和非TLS提供的支持 (h2c)和直接HTTP/2(h2c)连接。启用HTTP/2支持 对于HTTP连接器,必须使用以下UpgradeProtocol元素 嵌套在连接器中,属性为 org.apache.coyote.h

TLS仍然是在最新的Java和Tomcat上使用HTTP/2的先决条件吗?我可以将
添加到HTTP端口8080并期望HTTP/2正常工作吗?如何实际测试/查看HTTP/2是否被实际使用而不是HTTP?有命令行/浏览器工具吗?谢谢。

美国:

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

这表明TLS不是一项要求。问题仍然是您的浏览器是否支持升级

使用Firefox,按(F12)打开开发者工具,导航至网络分析。在这里,您可以看到一个表,其中显示了每个请求的几个属性。 如果不存在,请添加协议列,告诉您每个请求是否使用HTTP/1、h2c或任何其他协议。 Chrome还以类似的方式提供协议信息:

只需右键单击developer toolsNetowrk部分中的一列,即可获得所有可用列的概览:

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

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

在我的例子中,第一次请求都是使用Chrome和Firefox完成的,第三个请求是使用您在另一个答案中编写的命令
curl-v--http2 localhost:8080
完成的。

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

不幸的是,没有“协议”chrome调试器工具的“网络”选项卡中的信息。@KokHowTeh是否尝试添加它?在我的编辑中看到提示+数字。是的,我现在看到了。然而,由于我没有用TLS配置HTTP/2,我在协议窗口中只看到“h2”与h2c对应,然后是HTTP/2+quic/43。。。我迷失在这一部分,因为我认为我应该看到h2c而不是。我错过了什么?@KokHowTeh刚刚添加了第三个协议调试选项。只是为了澄清。当服务器重定向到https并从google站点提供服务时,我看到了h2和http/2+quic/43。其他人仍然使用http/1.1,这与Chrome只支持带有TLS的http/2这一事实是一致的。
... - - [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