Websocket 和跨域

Posted

技术标签:

【中文标题】Websocket 和跨域【英文标题】:Websocket and cross-domain 【发布时间】:2014-07-24 17:52:09 【问题描述】:

目前,我正在开发两个 webapp:

核心,用 Java 和 Vert.x 开发,从许多其他应用程序接收数据并将其发送到客户端) 客户端,用 php/JS 开发,从核心显示数据。

在生产阶段,客户端与我的核心不在同一个域中。

从我的开发阶段开始,这两个 web 应用程序都托管在同一台计算机上。我使用“ws:\\localhost:9090”将客户端连接到我的核心,传输数据没有问题。

但是,今天,我尝试将 localhost 替换为我的 IP 地址,但没有成功:s

我认为这是因为客户端与核心不在同一个域中。但我不知道如何解决这个问题?

你有什么想法吗?

谢谢!

代码示例(基于我的代码,但不是我的代码;)):

核心:http://pastebin.com/h2ZnBvQJ 对于客户:http://pastebin.com/DR5BeABf

【问题讨论】:

【参考方案1】:

是的,Websocket 可以跨域,但是你需要握手才能实现。您可能想查看:http://en.wikipedia.org/wiki/WebSockets 以获取握手示例。

也相关且可能重复:Web sockets make ajax/CORS obsolete?

【讨论】:

感谢您的回答,但我已经“解决”了我的问题。我使用代理,Wireshark 显示该代理切断了我的 websocket http 标头。所以我的核心没有看到 websocket 连接。没有这个代理,websocket 就可以工作了…… 然后使用 wss://(安全)连接。一些代理对 WS 不友好,它们会尝试像在普通 HTTP 请求中一样更改标头。例如,一些代理删除了“Upgrade:websocket”标头(因为被标记为“Connection”)。

以上是关于Websocket 和跨域的主要内容,如果未能解决你的问题,请参考以下文章

web服务(同域和跨域)

WebSocket凭什么可以跨域?

http网页建立websocket跨域问题,怎么解决?

关于websocket跨域的一个奇怪问题

websocket 可以跨域吗

springboot2.1.3整合websocket和websocket-security支持跨域连接