Socket.io从远程Cordova应用程序连接 - 不允许访问

时间:2018-01-04 09:14:32

标签: node.js socket.io

我正在尝试从我的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应用程序 - 所以我认为每个人都应该允许这样做,不是吗?

感谢。

2 个答案:

答案 0 :(得分:1)

在nodejs服务器上使用cors模块,并在nodejs服务器https://www.ride4you.co.il/socket.io/socket.io.js上保留此文件的副本,并从您自己的服务器请求它

答案 1 :(得分:0)

独立于node.js的详细信息(请参阅Hemant Rajpoot的回答)它与请求经过身份验证(客户端)的事实有关。

请检查这个基于C#+ angluar的stackoverflow答案,但是否则显示相同的行为/根本原因:

CORS: credentials mode is 'include'