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”标头的值
跨域ajax调用失败-Angular.js节点js + express