Java HTTP/2服务器套接字
我想让服务器套接字在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服务器套接字?
的Java不会得到ALPN至少到JDK 9,它将于2016年年底或2017年
同时,您可以使用Jetty的ALPN implementation,或者更好的是,使用码头(或其他服务器,建议),而不是使用ServerSocket做自己的HTTP/2实现。
[免责声明,我是码头提交者] Jetty 9.3对HTTP/2有很好的支持,包括HTTP/2 Push。
仅供参考,Java的开发团队正在准备ALPN为Java 9. 希望你可以看到这个问题,https://bugs.openjdk.java.net/browse/JDK-8062848,
ALPN支持可回迁到JDK 8这样的实现需要 一点不介绍任何新的Java SE API。这可能需要 在com.oracle.ssl.net软件包或通过系统 属性创建。
在JDK GameSalutes 2017-02-01 15:58:54
为什么不检查像Jetty,Netty和Undertow这样的现有实现?参见[http2的实现](https://github.com/http2/http2-spec/wiki/Implementations) – 2015-04-02 15:00:23
@DonghwanKim是的,我看过其中两个。 ISTR,他们中的一个通过一些'SSLExtension',IIRC将ALPN添加到Java SSL套接字。这可能是获得Java的ALPN的一种方式,因此可以让浏览器连接'h2'HTTP/2。可能工作太多,我不知道。我可能会等待并希望Java最终能在某些更新中获得ALPN。 – 2015-04-02 19:04:34
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