为了账号安全,请及时绑定邮箱和手机立即绑定

Tomcat 9.0.16 Java 11 HTTP/2

Tomcat 9.0.16 Java 11 HTTP/2

德玛西亚99 2022-07-27 21:04:41
TLS 是否仍然是在最新的 Java 和 Tomcat 上使用 HTTP/2 的先决条件?我可以添加<UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol"/>到 HTTP 端口 8080 并期望 HTTP/2 工作吗?如何实际测试/查看实际使用的是 HTTP/2 而不是 HTTP?任何命令行/浏览器工具?谢谢。
查看完整描述

2 回答

?
慕妹3146593

TA贡献1820条经验 获得超9个赞

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



查看完整回答
反对 回复 2022-07-27
?
慕田峪7331174

TA贡献1828条经验 获得超13个赞

正如HTTP 连接器 howto所述:

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

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

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

只需右键单击开发人员工具Netowrk部分中的列,即可获得所有可用列的概览:

//img1.sycdn.imooc.com//62e1381d0001680106540502.jpg

客户端使用的调试协议的另一种替代方法是访问日志记录。只需使用以下内容context.xhtml在默认ROOTwebapp 中创建一个\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您在其他答案中编写的命令完成的。


查看完整回答
反对 回复 2022-07-27
  • 2 回答
  • 0 关注
  • 170 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号