环回上的 WebSocket:MS Edge 上不允许跨区域连接错误

Posted

技术标签:

【中文标题】环回上的 WebSocket:MS Edge 上不允许跨区域连接错误【英文标题】:WebSocket on loopback : Cross zone connection not allowed error on MS Edge 【发布时间】:2017-11-24 10:16:43 【问题描述】:

我有一个在环回上使用 websocket 的脚本。由于网站是通过 Internet 提供的,而 websocket 是通过 Intranet 提供的,我在 Microsoft Edge 中观察到 “SCRIPT12017: WebSocket Error: SECURITY_ERR, Cross zone connection not allowed”。我在 Internet Explorer 中也观察到类似的问题。 IE 和 MS Edge 将 URL 分类到不同的区域,每个区域都具有独特的权限,因此不允许跨区域连接。

我可以通过启用 CORS(跨域资源共享)来解决此问题,还是 CORS 仅适用于来自同一区域的不同来源。 或者在不更改客户端设备上的任何设置的情况下,是否有任何其他解决方案可以解决此问题?

【问题讨论】:

【参考方案1】:

你可以在这里找到答案

Microsoft Edge does not allow localhost loopback for websockets

或者你可以在你的命令提示符下运行它

CheckNetIsolation LoopbackExempt -a -n="Microsoft.MicrosoftEdge_8wekyb3d8bbwe"

【讨论】:

【参考方案2】:

在浏览器 js 中实例化 socket.io 时,请使用 127.0.0.1 而不是 localhost

const socket = io("http://127.0.0.1:3000");

而不是

const socket = io("http://localhost:3000");

【讨论】:

【参考方案3】:

这可能无法回答您的问题,但对其他人有用。

这里有 2 个更改帮助我解决了问题并建立了 localhost WebSocket 连接。

    在控制面板 - Internet 选项中,选择安全选项卡。在安全选项卡中,选择本地 Intranet 区域。单击站点按钮并取消选中本地 Intranet 对话框中的所有复选框。或 在控制面板 - Internet 选项中,选择安全选项卡。在安全选项卡中,选择本地 Intranet 区域。单击“站点”按钮,然后单击“本地 Intranet”对话框中的“高级”按钮,将所需的网址添加到与 localhost 相同的区域。

【讨论】:

以上是关于环回上的 WebSocket:MS Edge 上不允许跨区域连接错误的主要内容,如果未能解决你的问题,请参考以下文章

MS Edge 支持跨域属性吗?

获取 polyfill 在 Edge(或 IE)上不起作用

获取参数在 Edge 14 上不起作用的 API

linux上的环回接口地址是多少?

为什么rx不接收来自UART上的环回tx的数据?

java * Windows 10,版本1703 * over * lo上的Java多播消息示例(软件环回接口1)*