CORS节点js问题

Posted

技术标签:

【中文标题】CORS节点js问题【英文标题】:CORS node js issue 【发布时间】:2016-07-15 23:56:20 【问题描述】:

浏览了堆栈上的多个帖子后,我仍然找不到正确的答案。

还检查了CORS 扩展的文档。

我已经启动并运行了以下服务器代码:

var WebSocketServer = require("ws").Server
var http = require("http")
var express = require('express')
var cors = require('cors')
var app = express();

app.use(cors());
var port = process.env.PORT || 9000

var server = http.createServer(app)
server.listen(port)
var count   = 0;
var clients = ;
var rooms   = ;
var wss = new WebSocketServer(server: server)
wss.on("connection", function(ws) 
    ws.on("create-room", function(data) 
        rooms[data] = creator : data.user_id, created : new Date()
    )
    ws.on("close", function() 
        console.log("websocket connection close")
    )
)

但我明白了:

XMLHttpRequest 无法加载 http://localhost:9000/socket.io/?EIO=3&transport=polling&t=LE-CbU0。一种 通配符 '*' 不能在 'Access-Control-Allow-Origin' 中使用 当凭证标志为真时标头。起源 'http://localhost:8100' 因此不允许访问。这 XMLHttpRequest 的凭据模式由 withCredentials 属性。

如果我用app.use(cors()); 评论该行

我明白了:

XMLHttpRequest 无法加载 http://localhost:9000/socket.io/?EIO=3&transport=polling&t=LE-Cwb8。不 'Access-Control-Allow-Origin' 标头出现在请求的 资源。因此不允许使用原点“http://localhost:8100” 使用权。响应的 HTTP 状态代码为 404。

很明显我的服务器已经启动并运行正常,但是

【问题讨论】:

【参考方案1】:

正如错误消息所说,通配符Access-Control-Allow-Origin 不能与Access-Control-Allow-Credentials 一起使用。默认情况下,cors 模块使用狂野起源,并且默认情况下 socket.io 需要凭据(无论如何,这里似乎是这样)。您需要做的是读取请求的Origin 标头并将其包含在响应的Access-Control-Allow-Origin 中。

幸运的是,cors 使这变得非常简单:为了反映请求来源,传入一个带有 origin: true 属性的选项对象。您还需要一个 credentials: true 属性来完全允许凭据:

app.use(cors(
    origin: true,
    credentials: true
));

【讨论】:

感谢您的回复,现在我收到Credentials flag is 'true', but the 'Access-Control-Allow-Credentials' header is '' 虽然有一个问题,但现在我在浏览器调用 url 时得到 404...如果我删除您的解决方案,我会收到 cors 错误...令人困惑... 嗨,我阅读了整个线程,但这对我不起作用。你也能看看我的问题吗? ***.com/questions/59679427/cors-validation-for-socket

以上是关于CORS节点js问题的主要内容,如果未能解决你的问题,请参考以下文章

我创建了一个启用 CORS 的简单节点服务器。但是当我做 node server.js 时,它会抛出错误

节点 JS - CORS 对预检请求的响应未通过访问控制检查:“Access-Control-Allow-Origin”标头的值

节点的 CORS 问题

跨域ajax调用失败-Angular.js节点js + express

Cors 不适用于 XMLhttprequest 节点/快递

CORS 中间件在 nodeJS 中不起作用