如何使用安全的WebSockets与SockJS?

4

我正在使用SockJS-client。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服务器实现是否需要类似的配置?
2个回答

18

我仔细查看了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 API连接Java客户端


感谢您的帮助,您的回答对我很有帮助。同时,请帮忙解决这个问题:http://stackoverflow.com/questions/29035552/sockjs-tomcat8-websockets-404-error?noredirect=1#comment46424068_29035552 - Human Being

1
尝试一下这段代码。
var ws= new SockJS('http://localhost:8080/sockjs/echo', undefined,{protocols_whitelist: [transport]});

不是关于如何访问服务器的问题,我可以使用相对URL来完成 - 我在哪里指定WSS? - cpandey05
请使用HTTP或HTTPS而不是WS或WSS。以下是代码示例: new SockJS('HTTPS://' + window.location.host + '/sockjs/echo') 此代码将连接到'wss://localhost:port/sockjs/echo'。 - moro

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接