Javascript 访问控制允许原点';响应中的头不能是通配符'*';当请求';s凭证模式为';包括';

Javascript 访问控制允许原点';响应中的头不能是通配符'*';当请求';s凭证模式为';包括';,javascript,node.js,express,socket.io,Javascript,Node.js,Express,Socket.io,我有一个socket.io服务器正在运行,无法从mac上的本地html文件连接到它 错误: 加载失败 :价值 响应中的“Access Control Allow Origin”标头不能为空 请求的凭据模式为“包括”时的通配符“*”。 因此,不允许访问源“null”。的凭据模式 XMLHttpRequest发起的请求由 withCredentials属性 服务器: var app = require('express')(); var server = app.listen(8080); var

我有一个socket.io服务器正在运行,无法从mac上的本地html文件连接到它

错误:

加载失败 :价值 响应中的“Access Control Allow 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文件(没有运行该文件的本地服务器)


//创建SocketIO实例,连接
//var socket=新io.socket();
var socket=io();
//变量套接字=io('https://example.com:8080“,{传输:['websocket']});
socket.connect('https://example.com:8080'); 
//添加一个连接侦听器
socket.on('connect',function(){
log('客户端已连接到服务器!');
});
//添加一个连接侦听器
socket.on('message',函数(数据){
log('从服务器收到消息!',数据);
});
//添加一个断开连接的侦听器
socket.on('disconnect',function()){
log('客户端已断开连接!');
});
//通过套接字向服务器发送消息
函数sendMessageToServer(消息){
socket.send(消息);
};

我的CORS很痛

但是您应该设置一个特定的域,它将对您有很大帮助

var cors = require('cors')
var app = express()

var corsOptions = {
  origin: function (origin, callback) {
    if (any_logic_you_want) {
      //this is not tested, just copied from npm cors docs
      callback(null, true)
    } else {
      callback(new Error('Not allowed by CORS'))
    }
  }
}

app.use(cors(corsOptions));
根据您拥有的访问控制允许凭据头设置,其中需要服务器指定此域可以访问Cookie等-这很有意义-您不想只向任何站点发送Cookie或凭据

如果您只有一个HTML文件,而该文件没有托管在任何地方,那么您所能做的就是禁用凭据,这样它们就不会被发送。我已经看过了,我想你可以这样设置:

var socket = io({
  extraHeaders: {
    'Access-Control-Allow-Credentials': 'omit'
  }
});

或者,您可以在浏览器中禁用CORS,但当然,这是最后一种方法,它会使您面临安全问题。

您是否尝试将
更改为
查找socket.io客户端js文件不是问题。错误是由于跨浏览器请求造成的。我试过CORS的chrome插件,但是没有用。接下来,您是否更改了此
app.options('*',cors())
应用程序使用(cors())?是且失败。您的节点websocket服务器是在多个实例(群集模式)下运行还是在fork模式下运行?我以前遇到过类似的问题,现在我正在尝试这段代码。问题是,我正在使用我的网站上的html页面,所以在白名单中设置某些内容将不起作用,因为它不是从特定域运行的。我假设上面的example1.com是客户端的域,而不是服务器正确吗?是的,我的错。移除它。在这种情况下,我假设设置您正在访问的域,这样您就会很好。这里没有白名单,只是将通过访问的域设置为Cors上面的代码是针对客户端的?我尝试了CORS chrome插件,但它们不起作用。@jdog是的,适用于客户端。适用于任何寻求解决方案的人。这个答案对我有用。然而,我不得不在Firefox中使用CORS插件和代码。ChromeCors插件从来都不起作用。
var socket = io({
  extraHeaders: {
    'Access-Control-Allow-Credentials': 'omit'
  }
});