zhcn 技术 Windows 如何在 Tomcat 中实现 HTTP2?

如何在 Tomcat 中实现 HTTP2?

在 Apache Tomcat 上设置 HTTP2 的分步指南

最新版本的 Tomcat 9.x 中添加了完整的 HTTP2 支持。 HTTP/2 速度很快,比 HTTP/1.1 快得多。

当直接从 Tomcat 向浏览器提供内容(而不是通过 Web 服务器)时,实施 HTTP/2 可以显着减少应用程序加载时间并提高整体性能。我们建议在非生产环境中对此进行测试,以确保您的应用程序按预期工作。

如果您考虑在 Apache 或 Nginx 等 Web 服务器上启用它,请阅读本文。

https://.com/http2-implementation-apache-nginx/
如何在 Tomcat 中实现 HTTP2?
如何在 Tomcat 中实现 HTTP2?

先决条件

在实施 HTTP2 之前,Tomcat 必须使用 SSL/TLS 证书进行保护。如果您需要实施方面的帮助,请参阅本指南。

https://.com/tomcat-ssl-guide/
如何在 Tomcat 中实现 HTTP2?
如何在 Tomcat 中实现 HTTP2?

在 Tomcat 中实现 HTTP/2

注意:在进行任何更改之前先备份配置文件,以便在出现问题时可以恢复它。

  • 登录到 Tomcat 服务器并导航到安装文件夹。
  • 进入conf文件夹
  • 使用vi或您喜欢的编辑器修改 server.xml 文件。
  • 将以下内容添加到您的 SSL 连接器
<UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />

总的来说,它看起来像这样:

 <Connector port="443" protocol="org.apache.coyote.http11.Http11AprProtocol"
               maxThreads="150" SSLEnabled="true" >
        <UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />
        <SSLHostConfig>
            <Certificate certificateKeyFile="conf/key.pem"
                         certificateFile="conf/cert.pem"
                         certificateChainFile="conf/chain.pem"
                         type="RSA" />
        </SSLHostConfig>
    </Connector>

以上是我的实验室配置,因此如果您复制此配置,请不要忘记调整配置以适应您的环境要求。调整端口,尤其是在使用自定义端口和认证路径时。

  • 导航到 bin 文件夹并运行以下脚本以重新启动 Tomcat 实例。
 ./shutdown.sh
./startup.sh
  • 如果您检查catalina.out日志,您将看到以下配置为支持h2确认信息:
 24-Feb-2019 19:43:47.559 INFO [main] org.apache.coyote.http11.AbstractHttp11Protocol.configureUpgradeProtocol The ["https-openssl-apr-443"] connector has been configured to support negotiation to [h2] via ALPN

这意味着 Tomcat 已准备好通过 HTTP2 协议处理请求。

另请阅读: LiteSpeed Web 服务器 HTTP 2 实施指南

如何在 Tomcat 中实现 HTTP2?
如何在 Tomcat 中实现 HTTP2?

测试Tomcat是否在H2上提供服务

我如何知道它是否按预期工作?

有多种方法可以对此进行测试。

使用 Chrome

对于测试 Intranet 应用程序很有用。

  • 启动谷歌浏览器
  • 按F12打开开发者工具
  • 转到“网络”选项卡
  • 访问您的 Tomcat 应用程序并注意协议列。
tomcat-http2
tomcat-http2

正如您所看到的,该请求是使用 h2 提供的。

如何在 Tomcat 中实现 HTTP2?
如何在 Tomcat 中实现 HTTP2?

使用日志

检查 access.log 文件以查看收到的请求。

 xx.xxx.xxx.xxx - - [24/Feb/2019:20:59:23 +0000] "GET / HTTP/2.0" 200 11468
xx.xxx.xxx.xxx - - [24/Feb/2019:20:59:23 +0000] "GET /tomcat.css HTTP/2.0" 200 5931
xx.xxx.xxx.xxx - - [24/Feb/2019:20:59:23 +0000] "GET /tomcat.png HTTP/2.0" 200 5103
xx.xxx.xxx.xxx - - [24/Feb/2019:20:59:23 +0000] "GET /bg-button.png HTTP/2.0" 200 713
xx.xxx.xxx.xxx - - [24/Feb/2019:20:59:23 +0000] "GET /bg-upper.png HTTP/2.0" 200 3103
xx.xxx.xxx.xxx - - [24/Feb/2019:20:59:23 +0000] "GET /bg-nav.png HTTP/2.0" 200 1401
xx.xxx.xxx.xxx - - [24/Feb/2019:20:59:23 +0000] "GET /asf-logo-wide.svg HTTP/2.0" 200 27530
xx.xxx.xxx.xxx - - [24/Feb/2019:20:59:23 +0000] "GET /bg-middle.png HTTP/2.0" 200 1918
xx.xxx.xxx.xxx - - [24/Feb/2019:20:59:23 +0000] "GET /favicon.ico HTTP/2.0" 200 21630

您是否看到所有请求中都对HTTP/2.0进行了分类?

使用基于互联网的工具

如果 Tomcat 应用程序 URL 在互联网上可用,您可以使用以下工具进行检查:

结论

在 Tomcat 上实现 H2 很容易。我们强烈建议您在实施后测试您的应用程序,以确保没有副作用。

如果您有兴趣学习 Tomcat 管理,请查看此在线课程。

在 Apache Tomcat 上设置 HTTP2 的分步指南

最新版本的 Tomcat 9.x 中添加了完整的 HTTP2 支持。 HTTP/2 速度很快,比 HTTP/1.1 快得多。

当直接从 Tomcat 向浏览器提供内容(而不是通过 Web 服务器)时,实施 HTTP/2 可以显着减少应用程序加载时间并提高整体性能。我们建议在非生产环境中对此进行测试,以确保您的应用程序按预期工作。

如果您考虑在 Apache 或 Nginx 等 Web 服务器上启用它,请阅读本文。

https://.com/http2-implementation-apache-nginx/
如何在 Tomcat 中实现 HTTP2?
如何在 Tomcat 中实现 HTTP2?

先决条件

在实施 HTTP2 之前,Tomcat 必须使用 SSL/TLS 证书进行保护。如果您需要实施方面的帮助,请参阅本指南。

https://.com/tomcat-ssl-guide/
如何在 Tomcat 中实现 HTTP2?
如何在 Tomcat 中实现 HTTP2?

在 Tomcat 中实现 HTTP/2

注意:在进行任何更改之前先备份配置文件,以便在出现问题时可以恢复它。

  • 登录到 Tomcat 服务器并导航到安装文件夹。
  • 进入conf文件夹
  • 使用vi或您喜欢的编辑器修改 server.xml 文件。
  • 将以下内容添加到您的 SSL 连接器
<UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />

总的来说,它看起来像这样:

 <Connector port="443" protocol="org.apache.coyote.http11.Http11AprProtocol"
               maxThreads="150" SSLEnabled="true" >
        <UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />
        <SSLHostConfig>
            <Certificate certificateKeyFile="conf/key.pem"
                         certificateFile="conf/cert.pem"
                         certificateChainFile="conf/chain.pem"
                         type="RSA" />
        </SSLHostConfig>
    </Connector>

以上是我的实验室配置,因此如果您复制此配置,请不要忘记调整配置以适应您的环境要求。调整端口,尤其是在使用自定义端口和认证路径时。

  • 导航到 bin 文件夹并运行以下脚本以重新启动 Tomcat 实例。
 ./shutdown.sh
./startup.sh
  • 如果您检查catalina.out日志,您将看到以下配置为支持h2确认信息:
 24-Feb-2019 19:43:47.559 INFO [main] org.apache.coyote.http11.AbstractHttp11Protocol.configureUpgradeProtocol The ["https-openssl-apr-443"] connector has been configured to support negotiation to [h2] via ALPN

这意味着 Tomcat 已准备好通过 HTTP2 协议处理请求。

另请阅读: LiteSpeed Web 服务器 HTTP 2 实施指南

如何在 Tomcat 中实现 HTTP2?
如何在 Tomcat 中实现 HTTP2?

测试Tomcat是否在H2上提供服务

我如何知道它是否按预期工作?

有多种方法可以对此进行测试。

使用 Chrome

对于测试 Intranet 应用程序很有用。

  • 启动谷歌浏览器
  • 按F12打开开发者工具
  • 转到“网络”选项卡
  • 访问您的 Tomcat 应用程序并注意协议列。
tomcat-http2
tomcat-http2

正如您所看到的,该请求是使用 h2 提供的。

如何在 Tomcat 中实现 HTTP2?
如何在 Tomcat 中实现 HTTP2?

使用日志

检查 access.log 文件以查看收到的请求。

 xx.xxx.xxx.xxx - - [24/Feb/2019:20:59:23 +0000] "GET / HTTP/2.0" 200 11468
xx.xxx.xxx.xxx - - [24/Feb/2019:20:59:23 +0000] "GET /tomcat.css HTTP/2.0" 200 5931
xx.xxx.xxx.xxx - - [24/Feb/2019:20:59:23 +0000] "GET /tomcat.png HTTP/2.0" 200 5103
xx.xxx.xxx.xxx - - [24/Feb/2019:20:59:23 +0000] "GET /bg-button.png HTTP/2.0" 200 713
xx.xxx.xxx.xxx - - [24/Feb/2019:20:59:23 +0000] "GET /bg-upper.png HTTP/2.0" 200 3103
xx.xxx.xxx.xxx - - [24/Feb/2019:20:59:23 +0000] "GET /bg-nav.png HTTP/2.0" 200 1401
xx.xxx.xxx.xxx - - [24/Feb/2019:20:59:23 +0000] "GET /asf-logo-wide.svg HTTP/2.0" 200 27530
xx.xxx.xxx.xxx - - [24/Feb/2019:20:59:23 +0000] "GET /bg-middle.png HTTP/2.0" 200 1918
xx.xxx.xxx.xxx - - [24/Feb/2019:20:59:23 +0000] "GET /favicon.ico HTTP/2.0" 200 21630

您是否看到所有请求中都对HTTP/2.0进行了分类?

使用基于互联网的工具

如果 Tomcat 应用程序 URL 在互联网上可用,您可以使用以下工具进行检查:

结论

在 Tomcat 上实现 H2 很容易。我们强烈建议您在实施后测试您的应用程序,以确保没有副作用。

如果您有兴趣学习 Tomcat 管理,请查看此在线课程。