2015-04-01 4 views
7

Desidero ottenere socket del server funzionanti per HTTP/2 in Java, preferibilmente TLS/https.Socket Java HTTP/2 server

Ho un socket del server TLS funzionante, ma i browser parleranno solo di HTTP/1.1. Se ho capito bene, hai bisogno di ALPN per ottenere un browser HTTP/2 per connetterti al tuo socket TLS e avviare l'esecuzione di HTTP/2 su di esso; i browser non chiederanno l'aggiornamento a HTTP/2 su https. Sembra che Java8 non faccia ALPN finora. Forse c'è un altro modo per costringere i browser a fare HTTP/2, almeno non TLS.

Quindi, qualcuno sa come creare un socket Java server per HTTP/2?

+1

Perché non dai un'occhiata a implementazioni esistenti come Jetty, Netty e Undertow? Vedi [implementazioni http2] (https://github.com/http2/http2-spec/wiki/Implementations) –

+0

@DonghwanKim Sì, ne ho esaminato due. ISTR che uno di loro aggiunge ALPN ai socket SSL Java tramite un 'SSLExtension', IIRC. Questo potrebbe essere un modo per ottenere ALPN per Java, e quindi essere in grado di connettersi al browser con 'h2' HTTP/2. Potrebbe essere troppo lavoro, non lo so. Potrei semplicemente aspettare e sperare che Java ottenga finalmente ALPN in qualche aggiornamento. –

+1

Java non otterrà ALPN almeno fino a JDK 9, che è previsto per la fine del 2016 o 2017. Nel frattempo, è possibile utilizzare [Jetty] (http://Plipse.org/Jetty) 's [implementazione ALPN] (http: //www.eclipse.org/jetty/documentation/current/alpn-chapter.html), o meglio ancora, usa direttamente Jetty (o altri server come suggerito) piuttosto che fare la tua implementazione HTTP/2 usando ServerSocket. – sbordet

risposta

11

Java non sarà possibile ottenere ALPN almeno fino al JDK 9, che è previsto per la fine del 2016 o 2017.

Nel frattempo, è possibile utilizzare Jetty s' ALPN implementation, o meglio ancora, utilizzare Jetty (o altri server come suggerito) direttamente anziché eseguire la propria implementazione HTTP/2 utilizzando ServerSocket.

[Disclaimer, I am a Jetty committer] Jetty 9.3 ha un ottimo supporto per HTTP/2, incluso HTTP/2 Push.

+0

Utilizzare decisamente un contenitore (ora utilizzo Undertow, ma anche Jetty è solido). Non c'è motivo di reinventare l'intero stack, soprattutto perché Spring MVC o Jersey gestiranno tutti gli impianti idraulici per te. – chrylis

+1

@chrylis Riesco a capire molto bene Jonas N, ho anche trovato questa pagina in cerca di un modo per rendere il mio server web di supporto HTTP/2, perché può essere divertente e puoi anche imparare molto da come funziona il protocollo HTTP ecc. Ma comunque grazie per le informazioni sull'implementazione ALPN di Jetty! – Ercksen

0

FYI, Java Dev Team si prepara ALPN per Java 9. Speriamo che, come potete vedere questo problema, https://bugs.openjdk.java.net/browse/JDK-8062848,

sostegno ALPN possono essere implementati su JDK 8 in modo un'implementazione è necessaria che non lo fa introdurre nuove API Java SE. Ciò potrebbe richiedere la creazione di qualcosa in un pacchetto com.oracle.ssl.net o tramite Proprietà sistema .

+0

L'uso di Jetty ALPN e il supporto per HTTP/2 in JDK <9 richiedono l'uso di SSL e una connessione https? Tutti gli esempi che ho visto usano https, ma mi chiedevo se si può fare anche su un normale http? – GameSalutes