3

我正在使用 SockJS 客户端。SockJS 构造函数采用相对 URL 作为

var ws= new SockJS('/spring-websocket-test/sockjs/echo', undefined,{protocols_whitelist: [transport]});

我们在哪里指出使用 WSS:// 而不是 WS://。如果我尝试绝对 URL,它会给出错误:

XMLHttpRequest cannot load ws://localhost:8080/appname/app. Cross origin requests are only supported for HTTP.
_ws_onclose. wasClean: false code: 1002 reason: Can't connect to server

不知道为什么会出现此错误。Spring Server 实现需要任何类似的配置吗?

4

2 回答 2

17

浏览了 sock JS 客户端代码:我浏览了客户端代码-sock JS 负责处理它-如果它的 HTTPS 它使用 WSS,否则它使用 WS

var that = this;
var url = trans_url + '/websocket';
if (url.slice(0, 5) === 'https') {
    url = 'wss' + url.slice(5);
} else {
    url = 'ws' + url.slice(4);
}

无需使用 SockJS 构造函数传递 WS 或 WSS(实际上甚至不是 HTTP/HTTPS) - 只需相对 URL 就足够了。SockJs 客户端库负责处理它。我遇到的另一个令人惊讶的事实是,它在 URL 末尾附加了“/websocket”——这让我知道了为什么我无法使用 jetty websocket-client apis 连接到 java 客户端

于 2013-09-16T14:29:58.517 回答
1

试试这个代码。

var ws= new SockJS('http://localhost:8080/sockjs/echo', undefined,{protocols_whitelist: [transport]});
于 2013-09-12T08:55:41.703 回答