Java HTTP/2 服务器套接字

Java HTTP/2 Server Socket

我想让服务器套接字在 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 至少要到 JDK 9 才能获得 ALPN,这定于 2016 年底或 2017 年。

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

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

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

ALPN support may be backported to JDK 8 so an implementation is needed that does not introduce any new Java SE APIs. This may require creating something in a com.oracle.ssl.net package or via System Properties.