我希望能够使用Java实现TLS/https的HTTP/2服务器套接字。我已经成功地创建了一个TLS服务器套接字,但浏览器只会将其升级为HTTP/1.1。如果我理解正确,您需要使用ALPN才能让HTTP/2浏览器连接到您的TLS套接字并在其中运行HTTP/2;浏览器不会要求升级到HTTPS上的HTTP/2。目前似乎Java8不支持ALPN。也许还有其他方法来强制浏览器使用HTTP/2,至少非TLS的情况下是可行的。那么,有没有人知道如何为HTTP/2创建Java服务器套接字?
Java在至少JDK9之前不会获得ALPN支持,该版本计划于2016年末或2017年发布。
同时,您可以使用Jetty的ALPN实现,或者更好的是,直接使用Jetty(或其他建议的服务器),而不是使用ServerSocket编写自己的HTTP/2实现。
[免责声明,我是Jetty的提交者] Jetty 9.3对HTTP/2提供了很好的支持,包括HTTP/2 Push。