Tomcat 8中的HTTP/2支持

19
经过一些研究,我惊讶地发现在Tomcat中没有关于HTTP/2支持的任何资源。8.0版本的变更日志表明实验性支持SPDY,wiki将HTTP/2称为受支持的规范(http://wiki.apache.org/tomcat/Specifications),但我没有找到任何教程。
你知道是否已经可以在Tomcat上启用HTTP/2吗?如果答案是肯定的,我该如何做?

这里有问题吗?关于什么想法?我希望你不是在问哪里可以找到文档...因为那是离题的! - Stephen C
我明确地加了问题... - Guillaume D.
可能是在Windows上配置Tomcat 8的SPDY的重复问题。 - Stephen C
简短回答:不要费心。 - Stephen C
参见:https://dev59.com/B10Z5IYBdhLWcg3w-EXS - Nux
4个回答

21

Tomcat目前还不支持HTTP/2。

计划从Tomcat 9开始支持HTTP/2,也可能会向早期版本进行后移植。

实验性的SPDY支持只是试验性的。只有在浏览器支持特定版本的SPDY时才能正常工作,但当前没有任何浏览器支持Tomcat实现的SDPY版本。

这种SPDY的实验性支持已经从Tomcat 8.0.22中删除,在changelog中有记录。


11

Tomcat 8.5已发布,其中包括从Tomcat 9中迁移过来的特性,并支持HTTP/2协议。

我个人还没有机会在Tomcat 8.5上设置HTTP/2,所以无法对“如何设置”进行评论。


8

Tomcat现已支持HTTP/2协议。Tomcat-8.5版本及以上支持HTTP/2。若要在Tomcat-8.5或更高版本中启用HTTP/2,请在tomcat的conf文件夹中的server.xml文件中升级连接器协议。

<Connector ... >
  <UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />
</Connector>

您还需要设置SSL证书的配置,以使其与此连接器配合使用。


1
谢谢!你如何执行服务器推送? - Guillaume D.
在Java中,可以使用PushBuilder API执行服务器推送。 - Dhumil Agarwal
那么这是否意味着没有可用的本地API,因此需要使用servlet 4?另外,如果这个说法是正确的,我们只能在Tomcat 9中利用服务器推送,因为似乎Tomcat 8.5仍然使用servlet 3.1? - Guillaume D.
关于如何配置Tomcat 9进行HTTP / 2的答案,可以参考以下链接:https://readlearncode.com/configure-tomcat-9-for-http2/。 - Alex Theedom
HTTP/2默认采用安全设计,因此我们需要在HTTP2中使用SSL。如果您不想使用SSL,则需要返回到HTTP 1.1并且无法使用HTTP2。 - Dhumil Agarwal

1

启用Tomcat8.5.x的HTTP2,

@Bean
       public EmbeddedServletContainerCustomizer tomcatCustomizer() {
        return container -> {
            if (container instanceof TomcatEmbeddedServletContainerFactory) {
                ((TomcatEmbeddedServletContainerFactory) container).addConnectorCustomizers((connector) -> {
                    connector.addUpgradeProtocol(new Http2Protocol());
                });
            }
        };
    }

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