Tomcat是否支持HTTP/2.0?

47
有人知道Tomcat支持HTTP/2.0的最低版本是什么吗?我已经在他们的网站上到处查找,但没有找到任何相关细节。
4个回答

70

我是Jetty的HTTP/2实现者,我关注其他实现HTTP/2的项目。

Tomcat的Mark Thomas已经为Tomcat 9 概述了对HTTP/2的支持

更新于2017年1月: Tomcat 8.5支持HTTP/2,请参见@joe-aldrich的回答https://dev59.com/B10Z5IYBdhLWcg3w-EXS#37889873

考虑到Servlet 4.0的目标之一是支持HTTP/2,并且HTTP/2支持需要JDK中的ALPN支持(我也参与其中),而ALPN支持计划在JDK 9中推出,这可能需要很长时间才能实现。

但是,请注意其他Servlet容器已经提供了HTTP/2支持。

Jetty 9.3.0具有完整、健壮的HTTP/2客户端和服务器支持。我们在自己的网站上运行HTTP/2已经很多月了,并且我们认为HTTP/2支持已经准备就绪。 Jetty的HTTP/2 Push API正在考虑纳入Servlet 4.0中。 HTTP/2 Push已经以透明的方式(通过Servlet过滤器)对部署到Jetty的应用程序可用。

Undertow也实现了HTTP/2。

Netty也有一个实现,但它不是基于Servlet API的。


1
为了在Tomcat中使用HTTP/2,您必须像上面的链接中提到的那样启用HTTPS。以下是一个简单的指南:https://readlearncode.com/configure-tomcat-9-for-http2/ - Alex Theedom

24

Tomcat 8.5已发布,其中包含了从Tomcat 9中回归的功能,并且支持HTTP/2。


1
据我所知,Tomcat 8.5 对HTTP/2的支持是基于Tomcat Native的。 - Alexis Hassler
1
在Tomcat 8.5中使用NIO或NIO2连接器的h2仍需要使用OpenSSL进行TLS。但是,Tomcat 8.5还支持明文h2c,这不需要Tomcat Native用于OpenSSL(尽管浏览器目前选择不实现h2c支持)。 - Joe Aldrich
本地的意思是嵌入在Spring Boot上的Tomcat无法提供HTTP2吗? - corlaez
Tomcat Native 是 Tomcat 的可选组件。我认为可以通过配置 APRLifecycleListener 与 Spring Boot 一起使用。您可能想查看 Github 上的 Spring Boot issue#7376,其中提到如何在 Spring Boot 上使用 APR 和 Embedded Tomcat(包括链接到 APRLifecycleListener 的配置示例)。https://github.com/spring-projects/spring-boot/issues/7376 - Joe Aldrich
如果在LD_LIBRARY_PATH中找到了libapr、libcrypto、libssl和libcnative,您无需进行任何配置即可使用http2(如果在application.properties中启用了server.http2.enabled=true)。 - Frischling

13

最新版本的Tomcat(版本9)完全支持HTTP/2。 但是,由于所有主要浏览器仅实现基于TLS的HTTP/2,因此您需要配置Tomcat才能允许此功能。本文解释了Tomcat中的TLS配置,但以下是总结。

打开 conf/server.xml 文件并进行以下配置更改。

<Connector port="8443"
  protocol="org.apache.coyote.http11.Http11AprProtocol"
  maxThreads="150" SSLEnabled="true">
    <UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol"/>
    <SSLHostConfig honorCipherOrder="false">
        <Certificate certificateKeyFile="conf/ca.key"
          certificateFile="conf/ca.crt"/>
    </SSLHostConfig>
</Connector>

8
如果将Tomcat仅配置为使用HTTP(在HTTP连接器端口8080上),并且我们使用Apache Web服务器提供HTTPS,它是否仍然有效? - Tony
我们可以在没有APR的情况下使用Nio在Tomcat中使用HTTP2吗? - nowucca
2
@Tony,你有没有找到上面问题的答案?我们有同样的设置,其中我们在HTTP上运行Tomcat,并使用Apache HTTP或Cloudfront作为代理。如果Tomcat仅配置为http(在http连接器端口8080上),我们是否仍然可以使用Apache Web服务器提供https服务? - Bradley

0
自动更新Tomcat v.9后,https不再工作,我通过在server.xml中注释以下行来解决了这个问题。
<!--<UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" /> -->

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接