Chrome Websockets CORS 政策

新手上路,请多包涵

我在 Chrome 中打开 websocket 时遇到问题。似乎在 websockets 的 chrome 中有一些 CORS 策略。

如果我在 www.example.com 上并尝试在 api.example.com 上打开 websocket,它会在控制台网络选项卡上显示 pending,并将触发 onerror 消息 WebSocket connection to 'wss://api.example.com' failed: Connection closed before receiving a handshake response 。如果我查看服务器,我看不到正在发出的 Web 套接字连接请求,因此没有选项请求可以响应,也没有设置 Access-Control-Allow-Origin 标头的能力。但是,如果我首先向 api.example.com 发出请求,浏览器会将我重定向回 www.example.com,它会正常工作。

您是否需要在 chrome 中对 websocket 请求使用相同的来源?

注意:此问题仅适用于 chrome。

原文由 Josh Wilson 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 899
2 个回答

我又遇到了这个问题。我仍然没有弄清楚为什么,但是首先向子域发出 OPTIONS (或任何其他)请求允许打开连接。

这似乎只是 wss 连接的问题,并且已经出现在多个域和证书中。

原文由 Josh Wilson 发布,翻译遵循 CC BY-SA 4.0 许可协议

WebSocket 没有浏览器强制执行 CORS。这里有两处可能出错的地方(假设您同时使用 HTTPS 和 WSS):

  • 服务器 强制执行 OriginOrigin HTTP 标头由浏览器设置为包含打开 WebSocket 连接的 JavaScript 的 HTML 页面的来源。服务器可以检查该标头并拒绝。但是既然你说其他浏览器正在工作(哪个?),这不太可能
  • 由于您使用的是 wss ,服务器证书必须完全有效,并且 无需任何用户交互 即可被浏览器接受。是这样吗?

原文由 oberstet 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题