即使我在服务器上允许Cors,Socket.io也给出CORS错误
我的节点服务器和客户端运行在不同的端口(分别为3001,5347)。 在我用过的客户端上,
var socket = io('http://127.0.0.1:3001');
在服务器上,我尝试了一个接一个
1) io.set('origins', '*:*'); 2) io.set('origins', 'http://127.0.0.1:5347'); 3) io.set('origins', '*'); 4) io.set('origins', '127.0.0.1:5347');
但是我得到以下错误:
XMLHttpRequest无法加载http://127.0.0.1:3001/socket.io/?EIO=3&transport=polling&t=1456799439856-4590 。 当凭证标志为真时,通配符“*”不能在“Access-Control-Allow-Origin”头中使用。 原因'null'因此不被允许访问。
注意:我在服务器上使用快递,我已经按以下方式使用了Cors中间件:
app.use(cors());
app和cors分别是express和cors的实例。
如果运行Express如下:
var app = express(); var server = app.listen(3000);
因此,要启动socket.io,我们可以做到:
var io = require('socket.io').listen(server);
问题是由于以下代码:
var http = require('http').Server(app); var io = require('socket.io')(http);
传递给socket.io的服务器对象与我正在监听的服务器对象不一样。
错误说…
原因'null'因此不被允许访问。
主机头是否在请求中设置?
设置主机头应该可以解决这个问题
您需要configuration节点服务器,以使Access-Control-Allow-Origin
标头的值回显到Origin
请求标头的值。 看到这部分的错误信息:
当凭证标志为真时,通配符“*”不能在“Access-Control-Allow-Origin”头中使用。 原因'null'因此不被允许访问。
您在请求中发送凭证(在底层请求中使用XHR + withCredentials
或Fetch + credentials
),在这种情况下, Access-Control-Allow-Origin
响应头的值必须与Origin
值在请求头。
所有这一切,如果服务器说起源的null
,似乎你不能testing你的应用程序加载它从Web服务器,但直接从文件系统,所以它结束了一个file://
URL。
如果是这样,你可能真的不想这样testing,而应该在本地运行一个Web服务器,并在testing时加载你的应用程序。
如果你使用的是Express,那么在你的服务启动代码之前定义一个这样的中间件…
app.use(function(request, response, next) { response.header("Access-Control-Allow-Origin", "*"); response.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); next(); });
- 节点js路由期间的CORS问题
- Chrome扩展程序:向使用Cookie凭据(CORS)发送的node.js服务器发出http请求
- 我的节点应用程序中的CORS不起作用
- angular度$ http请求从80端口到另一个端口
- 限制CORS不适用于POST请求
- 如何在请求的资源上出现“Access-Control-Allow-Origin”标题。 原因'null'因此不被允许访问。 在angular4?
- 在Express中设置默认的响应标题
- 即使在node.js应用程序中使用body-parser,req.body仍然在POST中为空(使用CORS和HTTPS)
- 使用CORS XHR时,浏览器不发送cookies