我正在尝试从我的cordova app访问Node.js socket.io服务器。 然后我收到以下错误:
Failed to load https://www.ride4you.co.il/socket.io/?EIO=3&transport=polling&t=M30S1z4: The value of the 'Access-Control-Allow-Origin' header in the response must not be the wildcard '*' when the request's credentials mode is 'include'. Origin 'http://127.0.0.1:8080' is therefore not allowed access. The credentials mode of requests initiated by the XMLHttpRequest is controlled by the withCredentials attribute.
这是客户端(app或localhost)中的连接代码:
<script src="https://www.ride4you.co.il/socket.io/socket.io.js">
</script>
<script type="text/javascript">
var socket = io("https://www.ride4you.co.il");
socket.on("disconnect", function() {
console.log("Disconnected");
socket = io();
console.log("Connected");
});
</script>
当我从实际域中尝试此代码时,没有错误,一切正常。但是从应用程序(不是原始域),有一个块。
我尝试删除此块,并允许每个源使用app.js中的下一个代码(main node.js文件)访问此套接字:
var express = require('express');
var app = express();
var server = require('http').createServer(app);
global.io = require('socket.io').listen(server);
io.set('origins', '*:*');
但那里仍然有同样的错误。
我知道有一个允许特定域名的选项,但我使用的是没有域名的cordova应用程序 - 所以我认为每个人都应该允许这样做,不是吗?
感谢。
答案 0 :(得分:1)
在nodejs服务器上使用cors模块,并在nodejs服务器https://www.ride4you.co.il/socket.io/socket.io.js上保留此文件的副本,并从您自己的服务器请求它
答案 1 :(得分:0)
独立于node.js的详细信息(请参阅Hemant Rajpoot的回答)它与请求经过身份验证(客户端)的事实有关。
请检查这个基于C#+ angluar的stackoverflow答案,但是否则显示相同的行为/根本原因: