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

时间:2018-06-05 11:24:13

标签: java tomcat servlets http2

我正在研究HTTP2以及我们在应用程序中使用它的可能性。目前我们正在使用Java 8开发并使用Tomcat 8.5.24(这意味着我们使用Servlet 3.1)。我已经搜索过网络,但找不到任何有关如何利用HTTP2功能的资源。

我能找到的唯一例子是使用Servlet 4.0(我看到的只有Tomcat 9支持),唯一展示的是使用PushBuilder来推送css和js文件客户请求和html页面。

我能否通过HTTP2使用Servlet 3.1提供的异步api? Servlet 3.1支持HTTP2吗?如果没有,那么Tomcat 8.5支持HTTP2的重点是什么?仅用于推送网络资源?

1 个答案:

答案 0 :(得分:3)

首先,一些基本要点:

  • 您必须使用Servlet 4.0来实现服务器推送。早期版本中不存在API,例如3.1。
  • Servlet规范现在属于Java EE(" Jakarata EE"),Servlet 4.0规范是Java EE 8的一部分。
  • 因此,要在servlet中实现服务器推送,必须使用EE 8.您不能使用EE 7.
  • 但是,您可以在EE 8中使用JDK 8或更高版本。无需转到JDK 9.
  • Tomcat provides a useful table用于将任何Tomcat版本与支持的Java和servlet版本相关联。
  • 以下服务器支持Java EE 8:GlassFish 5.x,Payara 5.x和Tomcat 9.x.您无法使用Tomcat 8.5。

解决您的具体问题:

  

我能否通过HTTP2使用Servlet 3.1提供的异步api?

是。它还有4.0规范。

  

Servlet 3.1支持HTTP2吗?

没有。 Servlet 4.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功能。