SPDY "مرحبًا بالخادم" مع Jetty
سؤال
أحاول إعداد الحد الأدنى من HTTP عبر خادم SPDY باستخدام رصيف, ، لأغراض تجريبية.أنا أعمل على هذا الكود:
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.eclipse.jetty.server.Connector;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.spdy.http.HTTPSPDYServerConnector;
import org.eclipse.jetty.util.ssl.SslContextFactory;
import org.eclipse.jetty.server.Request;
import org.eclipse.jetty.server.handler.AbstractHandler;
public class MySPDYHelloServer {
public static void main(String[] args) throws Exception {
Server server = new Server();
SslContextFactory sslFactory = new SslContextFactory();
sslFactory.setKeyStorePath("dummy_keystore.jks");
sslFactory.setKeyStorePassword("password");
sslFactory.setProtocol("TLSv1");
Connector connector = new HTTPSPDYServerConnector(sslFactory);
connector.setPort(8443);
server.addConnector(connector);
server.setHandler( new AbstractHandler(){
public void handle(String target, Request baseRequest,
HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
response.setContentType("text/html;charset=utf-8");
response.setStatus(HttpServletResponse.SC_OK);
baseRequest.setHandled(true);
response.getWriter().println("<h1>Hello World</h1>");
}
} );
server.start();
server.join();
}
}
لقد قمت بإنشاء مخزن المفاتيح باستخدام:
keytool -genkey -keystore dummy_keystore.jks
عندما أقوم بتوجيه Google Chrome (تم تمكين SPDY) إلى https://localhost:8443
إنه يحذرني بشأن الشهادة غير الموثوقة ثم يتم تحميلها للأبد.
أمثلة خادم العميل SPDY النقية (من هنا) يعمل ويعمل خادم HTTPS البسيط أيضًا؛يبدو أن المشكلة مرتبطة بـ HTTPSPDYServerConnector فصل.
فيما يلي قائمة بملفات JAR التي أستخدمها:
jetty-all-7.6.7.v20120910.jar
npn-boot-7.6.2.v20120308.jar
servlet-api-2.5.jar
spdy-core-7.6.7.v20120910.jar
spdy-jetty-7.6.7.v20120910.jar
spdy-jetty-http-7.6.7.v20120910.jar
وما يتعلق ببيئة Java الخاصة بي:
$ cat /opt/jdk1.7.0_07/release
JAVA_VERSION="1.7.0"
OS_NAME="Linux"
OS_VERSION="2.6"
OS_ARCH="i586"
ملحق الحل
جيسي ماكونيل قدمت إجابة, على أي حال، أولئك الذين يستخدمون Eclipse قد يجدون ما يلي مفيدًا.
المرطبان npn-boot-7.6.2.v20120308.jar
يجب (أيضًا) أن توضع في:
Run Configurations... -> Classpath -> Bootstrap Entries -> Add External JARs
لاحظ أنه منذ ذلك الحين مسائل النظام, ، يجب أن يظهر هذا الإدخال قبل ال JRE System Library
.
المحلول
هل تستخدم npn-boot كجرة Bootclasspath عند بدء هذا الأمر؟
لن يدعم Stock jvm npn (تفاوض البروتوكول التالي) ولن يعمل spdy، لذلك عليك التأكد من استخدام npn-boot jar بالتزامن مع خيار -Xbootclasspath.يبدو الأمر وكأنه مشكلتك منذ تعاملك مع تحميل الشهادة ثم توقفها ... كما تشير أيضًا إلى npn-boot باعتبارها تبعية عندما تكون بديلاً لفئات jvm أكثر من تبعية نموذجية.