Jetty 9.0使用SPDY嵌入配置但没有SSL / NPN

时间:2014-03-14 04:20:58

标签: jetty embedded-jetty spdy jetty-9

SSL / NPN将通过我们的负载均衡器(Haproxy)处理,因此我并不需要Jetty为我们这样做。

但我在网上看到的所有例子都只显示了如何使用SSL / NPN,而不是没有。

这是我到目前为止所做的尝试:

Server server = new Server();
HTTPConfiguration httpConfig = .... // set up some additional http config here
PushStrategey push = new ReferrerPushStrategy();
List<ConnectionFactory> factories = new ArrayList<>();
factories.add(new HTTPSPDYServerConnectionFactory(SPDY.V3, httpConfig, push));
factories.add(new HTTPSPDYServerConnectionFactory(SPDY.V2, httpConfig, push));
factories.add(new HTTPConnectionFactory(httpConfig));
ServerConnector connector = new ServerConnector(server, factories.toArray(new ConnectionFactory[factories.size()]));
connector.setPort(port);
server.addConnector(connector);
connector.start();
....

不幸的是,似乎出现了问题,当我尝试通过curl或浏览器等客户端访问服务器时,它们会无限期地挂起。我做错了什么?

由于

1 个答案:

答案 0 :(得分:3)

当您将ServerConnector配置为使用明文SPDY时,您的客户还必须说明文SPDY。

如果您使用curl等客户端或浏览器,则他们不会说明文SPDY。客户端将发送一个不被理解的HTTP请求(服务器期望SPDY),这就是为什么您的连接&#34;挂起&#34;。

只有Chromium / Chrome有一种模式,您可以使用here所述的--use-spdy=no-ssl参数使其说出明文SPDY。

因此,如果您使用明文SPDY,则配置多个ServerConnectionFactory没有意义,因为无法根据正在协商的协议选择一个,因为没有协议协商。

协议协商仅在使用SSL + NPN时发生。

如果你真的想要设置明文SPDY ServerConnectionFactory,那么你的代码基本上是正确的(除了不必要的多个ServerConnector); thisJetty SPDY测试套件中如何设置相同内容的示例。

最后,另请参阅reference documentation about SPDY