配置Jetty WebSocket客户端以使用代理

时间:2015-09-25 14:56:42

标签: proxy websocket jetty

我还没有找到任何解决方案。似乎Jetty尚不支持此功能。我可能错了所以请赐教。

我有一个非常简单的Java客户端,它连接到Java的{​​{1}}服务器。我想在它们之间添加一个透明的代理,以模拟我们在公司的专用网络中可以找到的内容。

2 个答案:

答案 0 :(得分:9)

更新:2017年5月

从Jetty 9.4.0及更高版本开始,本机Jetty WebSocketClient通过Jetty HttpClient支持Proxies。

这可以通过声明HttpClient及其代理配置,然后将其交给the WebSocketClient constructor来使用。

这仅适用于以下内容:

  • HTTP / 1.1升级到WebSocket
  • Native Jetty WebSocket API

可以使用以下内容:

  • HTTP / 2(目前还没有针对HTTP / 2的WebSocket规范)
  • JSR356 javax.websocket(有一些想法,用于修改JSR356 ClientContainer的API以允许通过构造函数传入Jetty HttpClient,请{03}}告诉我们这是否可行。<) / LI>

原始答案

使用Jetty 9,Jetty Native WebSocket客户端或JSR-356(javax.websocket)客户端实现都没有代理支持。

此支持计划用于Jetty 10(跟踪Servlet 4),并将导致Jetty中整个客户端库套件的完全重写,以获得同等的支持:

  • HTTP / 1.1
  • HTTP / 2(原生/直接)
  • HTTP / 1.1升级到HTTP / 2(h2c)
  • HTTP / 1.1升级到WebSocket
  • HTTP / 2 websocket频道(目前在草案规范中)
  • 代理支持
  • Cookie支持
  • 等...

由于JSR-356支持要求,Jetty上现有的WebSocket客户端实现是独立的。

现有的WebSocket客户端不利用Jetty 9.x中现有的Jetty HttpClient。如果确实如此,那么代理支持可能会在一组非常有限的场景下工作。

这是一个低优先级的功能请求,因为到目前为止支持WebSocket的现有代理很少(实际上,它们通常不支持HTTP / 1.1升级)。甚至Jetty自己的服务器端代理当前也不支持HTTP / 1.1升级连接。

答案 1 :(得分:2)

根据How HTML5 Web Sockets Interact With Proxy Servers中的图2,如果您尝试使用 透明 代理,则不必要求代理支持在客户端。另一方面, 显式 代理需要客户端库支持代理。

如果您的代理是透明的,Jetty WebSocket客户端不会有任何问题。