Socket.io Node.js 跨域请求被阻止

新手上路,请多包涵

我正在使用 node 和 socket.io 来编写聊天应用程序。它在 Chrome 上运行良好,但 mozilla 在启用跨域请求时出现错误。

跨域请求被阻止:同源策略不允许在 http://waleedahmad.kd.io:3000/socket.io/?EIO=2&transport=polling&t=1401964309289-2&sid=1OyDavRDf4WErI-VAAAI 读取远程资源。这可以通过将资源移动到同一域或启用 CORS 来解决。

这是我启动节点服务器的代码。

 var express = require('express'),
    app = express(),
    server = require('http').createServer(app),
    io = require('socket.io').listen(server),
    path = require('path');
server.listen(3000);

app.get('/', function(req, res) {
    res.sendfile(__dirname + '/public/index.html');
});

在客户端。

 var socket = io.connect('//waleedahmad.kd.io:3000/');

HTML 页面上的脚本标记。

 <script type="text/javascript" src="//waleedahmad.kd.io:3000/socket.io/socket.io.js"></script>

我还在应用程序根目录中使用 .htaccess 文件。 (waledahmad.kd.io/node)。

 Header add Access-Control-Allow-Origin "*"
Header add Access-Control-Allow-Headers "origin, x-requested-with, content-type"
Header add Access-Control-Allow-Methods "PUT, GET, POST, DELETE, OPTIONS"

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

阅读 825
1 个回答

简单的服务器端修复

❗ 请勿使用“socketio”包…请改用“socket.io”。 “socketio”已过时。有些用户似乎使用了错误的包。

❗ 安全警告:设置来源 * 开启钓鱼网站模仿您网站外观和感觉的能力,然后让它在窃取用户信息的同时正常工作。如果你设置原点,你可以让他们的工作更难,而不是更容易。也考虑使用 CSRF 令牌 也是一个好主意。

套接字.io v3

文档: https ://socket.io/docs/v3/handling-cors/

cors 选项: https ://www.npmjs.com/package/cors

 const io = require('socket.io')(server, {
  cors: {
    origin: '*',
  }
});

socket.io < v3

 const io = require('socket.io')(server, { origins: '*:*'});

要么

io.set('origins', '*:*');

要么

io.origins('*:*') // for latest version

* 单独不起作用,这让我陷入了困境。

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

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