Java HTTP / 2服务器套接字

我想让服务器套接字在Java中用于HTTP / 2,最好是TLS / https。

我有一个TLS服务器套接字工作正常,但浏览器只会说HTTP / 1.1。 如果我理解正确,您需要ALPN来获取HTTP / 2浏览器以连接到您的TLS套接字并开始在其上运行HTTP / 2; 浏览器不会要求在https上升级到HTTP / 2。 到目前为止,Java8似乎没有做ALPN。 也许还有其他方法来强制浏览器做HTTP / 2,至少是非TLS。

那么,有谁知道如何为HTTP / 2创建Java服务器套接字?

Java至少会在2016年底或2017年的JDK 9之前获得ALPN。

同时,您可以使用Jetty的ALPN实现 ,或者更好的是,直接使用Jetty(或其他服务器),而不是使用ServerSocket进行自己的HTTP / 2实现。

[免责声明,我是Jetty提交者] Jetty 9.3非常支持HTTP / 2,包括HTTP / 2推送 。

仅供参考,Java开发团队正在为Java 9准备ALPN。希望你能看到这个问题, https://bugs.openjdk.java.net/browse/JDK-8062848 ,

ALPN支持可能会向后移植到JDK 8,因此需要一个不引入任何新Java SE API的实现。 这可能需要在com.oracle.ssl.net包中或通过系统属性创建一些东西。