【问题标题】:Socket.IO: Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resourceSocket.IO:跨域请求被阻止:同源策略不允许读取远程资源
【发布时间】:2019-07-12 05:49:12
【问题描述】:

我在 FF 中有一个奇怪的问题,在 Chrome 中没有重现:使用 SSL 连接时,websocket 连接到另一个源不起作用。

我的 Rails 应用程序在 https://wax.lvh.me:3000 上运行,socket.io 节点 JS 应用程序在 https://wax.lvh.me:3001 上运行。当我尝试从 FF 中的 Rails 应用程序连接到套接字时,我在浏览器的开发控制台中看到以下警告:

当我打开“网络”选项卡时,我看到以下响应标头 - 请注意响应中没有访问控制标头:

我尝试使用其他 SO 答案中的以下食谱:

将来源设置为从this answer'*:*'

io = require('socket.io').listen(server)
io.set('origins', '*:*');

设置来自this answer的函数的来源

io.origins (origin, callback) =>
  if origin.match(/lvh\.me/)
    return callback(null, true)

  callback('Origin not allowed', false)

但到目前为止,没有任何东西可以帮助我解决这个问题

请注意,Chrome 中的访问控制标头已正确设置:

我使用以下浏览器和工具版本:

  • Firefox - 63.0.3(64 位)
  • Google Chrome - 版本 73.0.3683.39(官方构建)测试版(64 位)
  • Socket.io - 2.2.0

您知道如何在 socket.io 中为 FF 正确设置 CORS 吗?

【问题讨论】:

  • i.stack.imgur.com/HAcdu.png 处的图像不显示响应标头 - 它仅显示请求标头。您需要查看那里的“响应”选项卡。
  • @sideshowbarker 响应为空白
  • 尝试使用io.origins('*:*')设置origins(在服务器上),在客户端:socket = io.connect('https://wax.lvh.me:3000', { transports: ['websocket'] });

标签: ssl firefox socket.io cors


【解决方案1】:

我们的 socket.io 应用程序中的 CORS 配置一切正常

问题出在 SSL 证书上:我们的配置在 HTTPS 服务器初始化中缺少 ca(中间证书)选项。我们用这段代码解决了这个问题:

require('https').createServer({
  ca: fs.readFileSync(process.env.SSL_CA),         // this config was missing
  cert: fs.readFileSync(process.env.SSL_CERT),
  key: fs.readFileSync(process.env.SSL_KEY)
})

正如nodeJS create Secure Context documentation 所说:

castring | string[] | Buffer | Buffer[]。可选择覆盖受信任的 CA 证书。默认是信任由 Mozilla 策划的知名 CA。当使用此选项明确指定 CA 时,Mozilla 的 CA 将被完全替换。该值可以是字符串或缓冲区,也可以是字符串和/或缓冲区数组。任何字符串或缓冲区都可以包含多个串联在一起的 PEM CA。对等方的证书必须可链接到服务器信任的 CA,才能对连接进行身份验证。当使用不能链接到知名 CA 的证书时,必须将证书的 CA 明确指定为受信任的,否则连接将无法进行身份验证。如果对等方使用的证书不匹配或链接到默认 CA 之一,请使用 ca 选项提供对等方的证书可以匹配或链接到的 CA 证书。对于自签名证书,证书是其自己的 CA,并且必须提供。对于 PEM 编码的证书,支持的类型是“TRUSTED CERTIFICATE”、“X509 CERTIFICATE”和“CERTIFICATE”。

【讨论】:

    猜你喜欢
    • 2021-04-04
    • 2014-10-17
    • 2015-07-22
    • 2018-04-20
    • 2014-07-20
    • 1970-01-01
    相关资源
    最近更新 更多