跨域 WebSocket 连接 [Spring Boot]

Posted

技术标签:

【中文标题】跨域 WebSocket 连接 [Spring Boot]【英文标题】:Cross Domain WebSocket Connection [Spring Boot] 【发布时间】:2018-03-21 02:05:57 【问题描述】:

我有两个正在运行的 Spring Boot 服务实例。假设“app1:8080”和另一个实例“app2:7070”。 'app1:8080' 托管一个 html 页面,每当它启动时,它都会尝试将 web-socket 连接与'app2:7070' 连接起来。 像这样的东西: var webSocket = new WebSocket("ws://app2:7070/socket-endpoint");

但我总是收到 403 错误消息。我已阅读有关跨域的信息,并尝试在“app2:7070”中注册“app1:8080”。 但找不到任何解决方案。

服务器技术:spring boot 客户端技术:HTML5

【问题讨论】:

【参考方案1】:

这很可能是跨源调用的结果。你有不同的选择来解决这个问题:

在两个应用程序前面放置一个负载均衡器,例如 nginx,并使用相同的基本 URL 为它们提供服务 从同一个应用程序中提供 html(如果是小型应用程序,最简单的解决方案) 或在您的情况下允许来自 app1 的 app2 中的跨源调用,如记录的 here

【讨论】:

不能为具有相同 url 的两个应用程序提供服务,因为它们都是独立的应用程序,也不能从同一个应用程序提供服务如问题中所述。您能否尝试分享一个跨源调用的示例,它是否也适用于“wss”调用? 这个 CORS 配置 here 也应该被 websocket 获取 谢谢,能够做到。但仍然不确定“wss”。 很抱歉更新晚了,但是在 wss 上工作并且工作得像个魅力。谢谢乔纳森。

以上是关于跨域 WebSocket 连接 [Spring Boot]的主要内容,如果未能解决你的问题,请参考以下文章

跨域 Websocket 连接导致 NS_ERROR_DOM_SECURITY_ERR

无法创建到 Node.js socket.io 服务器的跨域 websocket 连接

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

websocket 可以跨域吗

tcp协议;websocket协议;同源策略和跨域

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