【问题标题】:Configuring Jetty WebSocket Client to use proxy配置 Jetty WebSocket 客户端以使用代理
【发布时间】:2015-09-25 14:56:42
【问题描述】:

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

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

【问题讨论】:

  • 一个java客户端什么的?什么样的代理? http/1.1? http/2?通过 http/1.1 的 websocket?通过 http/2 的 websocket?透明?逆转?服务器端?客户端?
  • 一个使用 Jetty 的 WebSocket Java 客户端。见标题。目前使用 HTTP/1.1,但我看不出它会如何影响我的问题。现在我只想设置一个透明代理。
  • 赞成。在目前的状态下,这个问题带来了有价值的答案。

标签: proxy websocket jetty


【解决方案1】:

更新:2017 年 5 月

从 Jetty 9.4.0 及更高版本开始,原生 Jetty WebSocketClient 通过 Jetty HttpClient 支持代理。

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

这仅适用于以下情况:

  • HTTP/1.1 升级到 WebSocket
  • 本机 Jetty WebSocket API

适用于以下情况:

  • HTTP/2(目前还没有基于 HTTP/2 的 WebSocket 规范)
  • JSR356 javax.websocket(有一些想法可以对 JSR356 ClientContainer 进行 API 重大更改,以允许通过构造函数传入 Jetty HttpClient,请通过 filing a new issue on 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 通道(目前在草案规范中)
  • 代理支持
  • Cookie 支持
  • 等等...

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

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

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

【讨论】:

  • 这是否意味着我仍然可以向远程代理发送消息但不能自己使用 Jetty 创建一个?感谢您的详细回答。
  • 有没有例子说明如何通过 SSL 做到这一点?我们在握手之前关闭 TCP 连接,这真是太棒了。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-29
    • 1970-01-01
    • 1970-01-01
    • 2016-04-17
    相关资源
    最近更新 更多