代码之家  ›  专栏  ›  技术社区  ›  PentaKon

如何使用Tomcat 8.5和Java SE 8支持HTTP2

  •  2
  • PentaKon  · 技术社区  · 8 年前

    我正在做一些关于http2的研究,以及我们在应用程序中使用它的可能性。目前我们正在Java 8中开发并使用Tomcat 85.24(这意味着我们使用Servlet 3.1)。我在网上搜索了一下,但找不到任何资源来说明如何利用http2的功能。

    我能找到的唯一例子是使用Servlet4.0(从我所看到的情况来看,Tomcat9只支持Servlet4.0),唯一展示的是使用 PushBuilder 当客户端请求和html页面时推送css和js文件。

    我能在http2上使用servlet 3.1提供的异步api吗?Servlet3.1是否支持Http2?如果不是,tomcat 8.5支持http2有什么意义?只为推送网络资源?

    1 回复  |  直到 8 年前
        1
  •  3
  •   skomisa    8 年前

    首先,一些基本点:

    • 必须使用Servlet4.0来实现服务器推送。该api在3.1等早期版本中不存在。
    • Servlet规范现在处于Java EE(“JakARATA EE””的保护伞之下,Servlet 4规范是Java EE 8的一部分。
    • 因此,要在servlet中实现服务器推送,必须使用ee 8。你不能用Ee7。
    • 但是,您可以在ee 8中使用jdk8或更高版本。无需转到JDK 9。
    • Tomcat provides a useful table 用于将任何Tomcat版本与支持的Java和servlet版本相关联。
    • 以下服务器支持JavaEE 8:GalasFISH 5 .x、PayaR 5 .x和Tomcat 9 .x。不能使用Tomcat 8.5。

    要解决您的具体问题:

    我能在http2上使用servlet 3.1提供的异步api吗?

    对。仍然有4.0规范。

    Servlet3.1是否支持Http2?

    不,Servlet4.0规范的附录A1明确指出,3.1的一个变化是“支持HTTP/2的需求”。

    如果不是,tomcat 8.5支持http2有什么意义?

    因为http/2中有一些独立于servlet的特性。见 the Tomcat 8.5 documentation on its HTTP/2 support . 例如,虽然您不能实现http/2服务器推送,但仍然可以使用tomcat 8.5实现http/2头压缩。

    只为推送网络资源?

    不,http/2是关于性能的,而且 server push is just one feature :

    • 是二进制的,而不是文本的
    • 完全多路复用,而不是有序和阻塞
    • 因此可以使用一个连接并行
    • 使用头压缩来减少开销
    • 允许服务器主动将响应推送到客户机缓存中

    最后,还有一些相关事项值得注意:

    • 虽然http/2本身不需要使用https,但实际上它是必需的,因为“ currently no browser supports HTTP/2 unencrypted “。
    • 所有流行的浏览器都已经完全支持http/2。
    • 据我所知,没有什么可以阻止使用任何主要的ide(intellij idea、eclipse、sts、netbeans)来开发和测试http/2功能。