【问题标题】:Tomcat support for HTTP/2.0?Tomcat 是否支持 HTTP/2.0?
【发布时间】:2015-08-31 13:05:41
【问题描述】:

有谁知道支持 HTTP/2.0 的最低版本的 Tomcat 是什么?我一直在他们的网站上到处寻找,但找不到任何有关此的详细信息。

【问题讨论】:

    标签: tomcat https tomcat7 tomcat8 http2


    【解决方案1】:

    最新版本的 Tomcat (version 9) 完全支持 HTTP/2。但是,由于所有主要浏览器都只实现HTTP/2 over TLS,因此您需要配置 Tomcat 以允许这样做。本文解释了TLS configuration in Tomcat,但这里是摘要。

    打开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>
    

    【讨论】:

    • 如果 Tomcat 仅配置了 http(在 http 连接器端口 8080 上)并且我们使用 Apache Web 服务器来传递 https,它仍然可以工作吗?
    • 我们可以在没有APR的tomcat中使用HTTP2吗?和蔚来?
    【解决方案2】:

    我是 Jetty 中的 HTTP/2 实施者,我会留意其他实施 HTTP/2 的项目。

    Tomcat 的 Mark Thomas 有 outlined support for HTTP/2 for Tomcat 9

    2017 年 1 月更新:Tomcat 8.5 支持 HTTP/2 请参阅 @joe-aldrich 回答 https://stackoverflow.com/a/37889873/2027465

    考虑到 Servlet 4.0 将作为目标 HTTP/2 支持,并且 HTTP/2 支持需要 JDK 中的 ALPN 支持(我也参与其中),并且 JDK 中的 ALPN 支持计划在JDK 9,可能还需要很长时间才能实现。

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

    Jetty 9.3.0 具有完整、健壮的support for 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。

    【讨论】:

    【解决方案3】:

    已发布 Tomcat 8.5,其功能从 Tomcat 9 向后移植,并包括 HTTP/2 支持。

    【讨论】:

    • AFAIK,Tomcat 8.5 对 HTTP/2 的支持基于 Tomcat Native。
    • 在 Tomcat 8.5 中使用带有 NIO 或 NIO2 连接器的 h2 目前仍然需要使用 OpenSSL 进行 TLS。然而,Tomcat 8.5 也支持明文 h2c,它不需要 Tomcat Native for OpenSSL(尽管浏览器目前选择不实现 h2c 支持)。
    • 本地的?这是否意味着spring boot上的嵌入式tomcat无法提供http2?
    • Tomcat Native 是 Tomcat 的可选组件。我相信它可以通过配置 APRLifecycleListener 与 Spring Boot 一起使用。您可能想查看 Github 上的 Spring Boot 问题 #7376,其中引用了在 Spring Boot 上使用 APR 和 Embedded Tomcat(包括指向 APRLifecycleListener 的配置示例的链接)。 github.com/spring-projects/spring-boot/issues/7376
    • 你不需要配置任何东西,如果在LD_LIBRARY_PATH中找到了libapr和libcrypto以及libssl和libcnative,你可以使用http2(如果你在application.properties中启用了server.http2。启用=真)
    猜你喜欢
    • 2016-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-02
    • 1970-01-01
    • 2013-10-03
    相关资源
    最近更新 更多