2015-04-01 19 views
7

Java'da HTTP/2, tercihen TLS/https için çalışan sunucu soketlerini almak istiyorum.Java HTTP/2 Sunucu Soketi

İyi çalışan bir TLS sunucu soketim var, ancak tarayıcılar yalnızca HTTP/1.1 ile konuşacaktır. Doğru bir şekilde anlarsam, TLS soketinize bağlanmak için HTTP/2 tarayıcısı almak ve HTTP/2'yi çalıştırmaya başlamak için ALPN'ye ihtiyacınız vardır; tarayıcılar https'deki HTTP/2'ye yükseltme istemez. Java8 şu ana kadar ALPN yapmıyor gibi görünüyor. Belki de tarayıcıları HTTP/2, en azından TLS olmayan yapmak için zorlamak için başka bir yol var.

Peki, HTTP/2 için Java sunucu soketi nasıl yapıldığını bilen var mı?

+1

Neden Jetty, Netty ve Undertow gibi mevcut uygulamaları denetlemiyorsunuz? Bkz. [Http2 uygulamaları] (https://github.com/http2/http2-spec/wiki/Implementations) –

+0

@DonghwanKim Evet, ikisine baktım. ISTR bunlardan birinin, bazı 'SSLExtension', IIRC aracılığıyla Java SSL soketlerine ALPN eklediğini. Bu, ALPN'yi Java için almanın bir yolu olabilir ve böylece 'h2' HTTP/2 ile tarayıcıya bağlanabilecektir. Çok fazla iş olabilir, bilmiyorum. Java’nın bazı güncellemelerde ALPN’ye ulaşmasını bekleyebilirim. –

+1

Java, 2016 veya 2017 sonları için geçerli olan en az JDK 9'a kadar ALPN alamaz. Bu arada, [Jetty] (http://eclipse.org/jetty) 'nin [ALPN uygulaması]' nı kullanabilirsiniz (http: //www.eclipse.org/jetty/documentation/current/alpn-chapter.html), ya da daha iyisi, ServerSocket kullanarak kendi HTTP/2 uygulamanızı yapmak yerine, Jetty'i (ya da önerilen diğer sunucuları) doğrudan kullanın. – sbordet

cevap

11

Java henüz Jetty 'ın ALPN implementation, ya da daha iyi kullanabilir,

arada geç 2016 ya da 2017 için planlanan en az JDK 9 dek ALPN almazsınız olarak Jetty (ya da diğer sunucular kullanırız Önerilen) ServerSocket kullanarak kendi HTTP/2 uygulamanızı yapmak yerine doğrudan.

[Yasal Uyarı, Ben bir Jetty komiseriyim] Jetty 9.3, HTTP/2 Push dahil HTTP/2 için büyük destek içerir.

+0

Kesinlikle bir kap kullanın (şimdi Undertow'u kullanıyorum, fakat Jetty de sağlam). Tüm yığının yeniden icat edilmesinin bir sebebi yok, özellikle de Spring MVC veya Jersey sizin için tüm sıhhi tesisat işleyecek. – chrylis

+1

@chrylis Jonas N'yi çok iyi anlayabiliyorum, ayrıca bu sayfayı web sunucusu desteği HTTP/2'yi yapmanın bir yolunu buldum, çünkü eğlenceli olabilir ve HTTP'nin nasıl çalıştığı hakkında çok şey öğrenebilirsiniz. Yine de Jetty'nin ALPN uygulaması hakkında bilgi için teşekkürler! – Ercksen

0

Bilginize, Java Dev Ekibi bu sorunu, https://bugs.openjdk.java.net/browse/JDK-8062848 görebilirsiniz Umarım olarak Java 9. için ALPN hazırlanıyor

ALPN destek JDK 8'e backported edilebilir

öylesine bir uygulama değil yapar gereklidir yeni Java SE API'lerini tanıtın. Bu, bir com.oracle.ssl.net paketinde veya System Özellikleri aracılığıyla bir şey oluşturulmasını gerektirebilir.

+0

Jetty ALPN kullanımı ve JDK içinde HTTP/2 desteği <9, SSL kullanımı ve https bağlantısı gerektirir? Gördüğüm tüm örnekler, https kullanıyorlar ancak normal http üzerinden yapılıp yapılamayacağını merak ediyorlardı. – GameSalutes