2015-04-01 9 views
7

Ich möchte für HTTP/2 in Java, vorzugsweise TLS/https Arbeits Server-Sockets erhalten.Java HTTP/2 Server Sockel

Ich habe einen TLS-Server-Socket funktioniert gut bekommen, aber Browser wird nur HTTP sprechen/1.1 zu. Wenn ich das richtig verstanden habe, brauchen Sie ALPN, um einen HTTP/2-Browser für die Verbindung zu Ihrem TLS-Socket zu bekommen und damit HTTP/2 zu starten; Browser werden auf HTTPS nicht nach einem Upgrade auf HTTP/2 fragen. Es scheint, dass Java8 ALPN bisher nicht tut. Vielleicht gibt es eine andere Möglichkeit Browser zu zwingen HTTP/2 zu tun, zumindest nicht TLS.

Also, Weiß jemand, wie einen Java-Server-Socket zu machen für HTTP/2?

+1

Warum Sie bestehende Implementierungen nicht überprüfen, wie Jetty, Netty und Undertow? Siehe [http2 Implementierungen] (https://github.com/http2/http2-spec/wiki/Implementations) –

+0

@DonghwanKim Ja, ich habe zwei von ihnen angeschaut. ISTR, dass einer von ihnen ALPN über eine 'SSLExtension', IIRC, zu Java SSL-Sockets hinzufügt. Dies könnte eine Möglichkeit sein, ALPN für Java zu bekommen und somit in der Lage zu sein, einen Browser mit 'h2' HTTP/2 zu verbinden. Könnte zu viel Arbeit sein, ich weiß es nicht. Ich könnte nur warten und hoffen, dass Java irgendwann ALPN in einigen Updates bekommt. –

+1

Java wird nicht ALPN bekommen bis mindestens JDK 9, die inzwischen für Ende 2016 oder 2017 geplant ist, können Sie [Jetty] (http://eclipse.org/jetty) 's [ALPN Implementierung] (http: //www.eclipse.org/jetty/documentation/current/alpn-chapter.html), oder noch besser, verwenden Sie Jetty (oder andere Server wie vorgeschlagen) direkt, anstatt Ihre eigene HTTP/2-Implementierung mit ServerSocket durchzuführen. – sbordet

Antwort

11

Java wird nicht ALPN bekommen bis mindestens JDK 9, die für Ende 2016 oder 2017.

Inzwischen geplant ist, können Sie Jetty ‚s ALPN implementation, oder besser verwenden noch verwenden Jetty (oder einem anderen Server als empfohlen), anstatt Ihre eigene HTTP/2-Implementierung mit ServerSocket durchzuführen.

[Haftungsausschluss, ich bin ein Jetty Committer] Jetty 9.3 hat große Unterstützung für HTTP/2, einschließlich HTTP/2 Push.

+0

Verwenden Sie unbedingt einen Container (ich verwende jetzt Undertow, aber Jetty ist auch solide). Es gibt keinen Grund, den gesamten Stack neu zu erfinden, vor allem, weil Spring MVC oder Jersey alles für Sie erledigen. – chrylis

+1

@chrylis Ich kann sehr gut Jonas N verstehen, fand ich diese Seite auch nach einem Weg suchen, um meine Webserver Unterstützung HTTP/2 zu machen, weil es Spaß machen kann, und Sie können auch eine Menge von dem lernen, wie HTTP usw. Aber funktionieren trotzdem danke für die Infos zur Jetty's ALPN Implementierung! – Ercksen

0

FYI, Java Dev Team bereitet ALPN für Java 9. Hoffentlich, wie Sie dieses Problem sehen, https://bugs.openjdk.java.net/browse/JDK-8062848,

ALPN Unterstützung 8 bis JDK zurückportiert werden kann, um eine Implementierung ist benötigt, die nicht Einführung neuer Java SE-APIs Dies kann erfordern Erstellen von etwas in einem com.oracle.ssl.net-Paket oder über System Eigenschaften.

+0

Erfordert die Verwendung von Jetty ALPN und die Unterstützung von HTTP/2 in JDK <9 die Verwendung von SSL und einer https-Verbindung? Alle Beispiele, die ich gesehen habe, benutzen https, aber haben sich gefragt, ob es auch über das normale http möglich ist? – GameSalutes