2015-04-01 92 views
7

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

我已经有一个TLS服务器套接字工作正常,但浏览器只会与HTTP/1.1通话。如果我理解正确,您需要ALPN才能让HTTP/2浏览器连接到您的TLS套接字并开始在其上运行HTTP/2;浏览器不会要求在https上升级到HTTP/2。看来Java8到目前为止并没有执行ALPN。也许还有其他一些方式来强制浏览器执行HTTP/2,至少是非TLS。

那么,任何人都知道如何为HTTP/2制作一个Java服务器套接字?

+1

为什么不检查像Jetty,Netty和Undertow这样的现有实现?参见[http2的实现](https://github.com/http2/http2-spec/wiki/Implementations) – 2015-04-02 15:00:23

+0

@DonghwanKim是的,我看过其中两个。 ISTR,他们中的一个通过一些'SSLExtension',IIRC将ALPN添加到Java SSL套接字。这可能是获得Java的ALPN的一种方式,因此可以让浏览器连接'h2'HTTP/2。可能工作太多,我不知道。我可能会等待并希望Java最终能在某些更新中获得ALPN。 – 2015-04-02 19:04:34

+1

Java将不会获得ALPN,直到至少将于2016年末或2017年的JDK 9发布。同时,您可以使用[Jetty](http://eclipse.org/jetty)的[ALPN实现](http: //www.eclipse.org/jetty/documentation/current/alpn-chapter.html),或者更好的是,直接使用Jetty(或其他服务器),而不是使用ServerSocket自己执行HTTP/2实现。 – sbordet 2015-04-03 20:46:56

回答

11

的Java不会得到ALPN至少到JDK 9,它将于2016年年底或2017年

同时,您可以使用JettyALPN implementation,或者更好的是,使用码头(或其他服务器,建议),而不是使用ServerSocket做自己的HTTP/2实现。

[免责声明,我是码头提交者] Jetty 9.3对HTTP/2有很好的支持,包括HTTP/2 Push

+0

绝对使用一个容器(我现在使用Undertow,但Jetty也是固体的)。没有理由重新创建整个堆栈,特别是因为Spring MVC或Jersey将处理所有的管道。 – chrylis 2015-04-06 08:56:59

+1

@chrylis我可以很好地理解Jonas N,我也发现这个页面寻找一种方法来使我的web服务器支持HTTP/2,因为它可以很有趣,你也可以从HTTP的工作方式等方面学到很多东西。无论如何感谢关于Jetty的ALPN实施的信息! – Ercksen 2015-09-23 16:00:01

0

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

ALPN支持可回迁到JDK 8这样的实现需要 一点不介绍任何新的Java SE API。这可能需要 在com.oracle.ssl.net软件包或通过系统 属性创建。

+0

在JDK <9中使用Jetty ALPN和支持HTTP/2是否需要使用SSL和https连接?我见过的所有例子都使用https,但想知道它是否可以通过普通的http来完成? – GameSalutes 2017-02-01 15:58:54