配置Jetty WebSocket Client使用代理



我还没有找到任何解决方案。似乎Jetty还不支持这个功能。我可能错了,所以请给我开导。

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

更新:2017年5月,

从Jetty 9.4.0及以后开始,本机Jetty WebSocketClient通过Jetty HttpClient支持代理。

这是通过声明HttpClient及其代理配置,然后将其传递给WebSocketClient构造函数来使用的。

  • HTTP/1.1升级到WebSocket
  • 原生Jetty WebSocket api

不能与一起使用:

  • HTTP/2(目前还没有HTTP/2的WebSocket规范)
  • JSR356 javax。websocket(有一些想法对JSR356 ClientContainer进行API破坏更改,允许通过构造函数传入Jetty HttpClient,让我们知道这对你来说是否可行,请在github上提交一个新问题)

原始回答

在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通道(目前在规范草案中)
  • 代理支持
  • <
  • 饼干支持/gh>
  • 等等…

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

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

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

根据HTML5 Web Sockets如何与代理服务器交互的图2,如果您试图使用透明代理,您不必在客户端要求代理支持。另一方面,显式代理要求客户端库支持代理。

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

相关内容

  • 没有找到相关文章

最新更新