我正在使用 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 许可协议
简单的服务器端修复
❗ 请勿使用“socketio”包…请改用“socket.io”。 “socketio”已过时。有些用户似乎使用了错误的包。
❗ 安全警告:设置来源
*
开启钓鱼网站模仿您网站外观和感觉的能力,然后让它在窃取用户信息的同时正常工作。如果你设置原点,你可以让他们的工作更难,而不是更容易。也考虑使用 CSRF 令牌 也是一个好主意。套接字.io v3
文档: https ://socket.io/docs/v3/handling-cors/
cors 选项: https ://www.npmjs.com/package/cors
socket.io < v3
要么
要么
*
单独不起作用,这让我陷入了困境。