【发布时间】:2015-06-06 14:17:16
【问题描述】:
我想让服务器套接字在 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 服务器套接字吗?
【问题讨论】:
-
您为什么不检查一下现有的实现,例如 Jetty、Netty 和 Undertow?见http2 implementations
-
@DonghwanKim 是的,我看过其中两个。 ISTR,其中一个通过一些“SSLExtension”IIRC 将 ALPN 添加到 Java SSL 套接字。这可能是为 Java 获取 ALPN 的一种方式,因此能够让浏览器与“h2”HTTP/2 连接。可能工作量太大,我不知道。我可能只是等待并希望 Java 最终在某些更新中获得 ALPN。
-
Java 至少要到 JDK 9 才能获得 ALPN,预计在 2016 年末或 2017 年推出。同时,您可以使用 Jetty 的 ALPN implementation,或者更好的是,使用 Jetty (或建议的其他服务器)直接而不是使用 ServerSocket 进行自己的 HTTP/2 实现。
-
@sbordet 太好了!可以简单地告诉 JVM 在 VM 启动时使用“path_to_alpn_boot_jar”。这实际上是一个很好的答案——提示,提示。另外,感谢 Java 的 APLN 时间表。