【发布时间】:2018-07-31 16:17:42
【问题描述】:
我有一个 socket.io 服务器正在运行,但我无法通过我的 mac 上的本地 html 文件连接到它。
错误:
加载失败 http://file/socket.io/?EIO=3&transport=polling&t=M6tFqlm: 的值 响应中的“Access-Control-Allow-Origin”标头不得为 当请求的凭据模式为“包含”时,通配符“*”。 因此,Origin 'null' 不允许访问。凭证模式 XMLHttpRequest 发起的请求由 withCredentials 属性。
服务器:
var app = require('express')();
var server = app.listen(8080);
var cors = require('cors');
app.options('*', cors());
var io = require('socket.io').listen(server);
....
// think this is redudant
server.listen(8080);
本地 HTML 文件(没有本地服务器运行)
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.js"></script>
</head>
<body>
<script src="../socket.io-client/dist/socket.io.js"></script>
<script>
// Create SocketIO instance, connect
// var socket = new io.Socket();
var socket = io();
//var socket = io('https://example.com:8080', { transport : ['websocket'] });
socket.connect('https://example.com:8080');
// Add a connect listener
socket.on('connect',function() {
console.log('Client has connected to the server!');
});
// Add a connect listener
socket.on('message',function(data) {
console.log('Received a message from the server!',data);
});
// Add a disconnect listener
socket.on('disconnect',function() {
console.log('The client has disconnected!');
});
// Sends a message to the server via sockets
function sendMessageToServer(message) {
socket.send(message);
};
</script>
<div id="date"></div>
<textarea id="text"></textarea>
</body>
</html>
【问题讨论】:
-
你试过把
<script src="../socket.io-client/dist/socket.io.js"></script>改成<script src="/socket.io/socket.io.js"></script> -
查找 socket.io 客户端 js 文件不是问题。该错误是由于跨浏览器请求。我尝试了 CORS chrome 插件,但它们没有帮助。
-
好的。接下来,你把这个
app.options('*', cors());改成app.use(cors());了吗? -
是但失败了。
-
您的节点 websocket 服务器是在多个实例(集群模式)还是 fork 模式下运行?我之前也遇到过类似的问题
标签: javascript node.js express socket.io