配置 Jetty WebSocket 客户端使用代理
Configuring Jetty WebSocket Client to use proxy
我还没有找到任何解决方案。 Jetty
好像还不支持这个功能。可能我说的不对,请赐教。
我有一个非常简单的 Java
客户端,它连接到位于 localhost:8080
的 Java
服务器。我想在它们之间添加一个透明代理,以模拟我们可以在公司的专用网络中找到什么。
更新:2017 年 5 月
从 Jetty 9.4.0 及更高版本开始,本机 Jetty WebSocketClient 通过 Jetty HttpClient 支持代理。
这通过声明一个 HttpClient 及其代理配置,然后将其交给 the WebSocketClient constructor 使用来实现。
这仅适用于以下情况:
- HTTP/1.1 升级到 WebSocket
- 本机 Jetty WebSocket APIs
这不适用于以下情况:
- HTTP/2(目前还没有关于 HTTP/2 的 WebSocket 规范)
- JSR356 javax.websocket(有关于 API 对 JSR356 ClientContainer 进行重大更改以允许通过构造函数传入 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 (native/direct)
- 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 side Proxy 目前也不支持 HTTP/1.1 升级连接。
根据 How HTML5 Web Sockets Interact With Proxy Servers 中的图 2,如果您尝试使用 transparent 代理,您不需要必须在客户端要求代理支持。另一方面,explicit 代理需要客户端库支持代理。
如果您的代理是透明的,Jetty WebSocket 客户端不会有任何问题。
我还没有找到任何解决方案。 Jetty
好像还不支持这个功能。可能我说的不对,请赐教。
我有一个非常简单的 Java
客户端,它连接到位于 localhost:8080
的 Java
服务器。我想在它们之间添加一个透明代理,以模拟我们可以在公司的专用网络中找到什么。
更新:2017 年 5 月
从 Jetty 9.4.0 及更高版本开始,本机 Jetty WebSocketClient 通过 Jetty HttpClient 支持代理。
这通过声明一个 HttpClient 及其代理配置,然后将其交给 the WebSocketClient constructor 使用来实现。
这仅适用于以下情况:
- HTTP/1.1 升级到 WebSocket
- 本机 Jetty WebSocket APIs
这不适用于以下情况:
- HTTP/2(目前还没有关于 HTTP/2 的 WebSocket 规范)
- JSR356 javax.websocket(有关于 API 对 JSR356 ClientContainer 进行重大更改以允许通过构造函数传入 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 (native/direct)
- 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 side Proxy 目前也不支持 HTTP/1.1 升级连接。
根据 How HTML5 Web Sockets Interact With Proxy Servers 中的图 2,如果您尝试使用 transparent 代理,您不需要必须在客户端要求代理支持。另一方面,explicit 代理需要客户端库支持代理。
如果您的代理是透明的,Jetty WebSocket 客户端不会有任何问题。