我在 Chrome 中打开 websocket 时遇到问题。似乎在 websockets 的 chrome 中有一些 CORS 策略。
如果我在 www.example.com 上并尝试在 api.example.com 上打开 websocket,它会在控制台网络选项卡上显示挂起,并将触发错误消息 WebSocket connection to ' wss://api.example.com' 失败:连接在收到握手响应之前关闭
。如果我查看服务器,我看不到正在发出的 Web 套接字连接请求,因此没有选项请求可以响应,也没有设置 Access-Control-Allow-Origin header 的能力。
但是,如果我首先向 api.example.com 发出请求,浏览器会将我重定向回 www.example.com,它会正常工作。
是否需要在 chrome 中对 websocket 请求使用相同的来源?
注意:此问题仅适用于 chrome。
最佳答案
WebSocket 没有浏览器强制执行 CORS。这里有两处可能出错的地方(假设您同时使用 HTTPS 和 WSS):
- 服务器 执行
Origin
。Origin
HTTP header 由浏览器设置为包含打开 WebSocket 连接的 JavaScript 的 HTML 页面的来源。服务器可以检查该 header 并拒绝。但是既然你说其他浏览器可以工作(哪个?),这不太可能 - 由于您使用的是
wss
,因此服务器证书必须完全有效,并且无需任何用户交互即可被浏览器接受。是这样吗?
关于javascript - Chrome Websockets CORS 政策,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22644392/