node.js - 使用 NodeJS / Express 和 HTTPS 时 socket.io 中出现 CORS 错误
问题描述
我使用下面的代码能够从我的应用程序的不同部分访问 socket.io。在开发服务器上一切正常,但是一旦我在 HTTPS 服务器上进行生产尝试,它就会失败并出现以下错误。
从源“ http://127.0.0.1:9999 ”访问“ https://nodejs.demo.net/socket.io/?EIO=3&transport=polling&t=MkQBnlU ”处的 XMLHttpRequest已被 CORS 策略阻止:响应预检请求未通过访问控制检查:当请求的凭据模式为“包含”时,响应中的“Access-Control-Allow-Origin”标头的值不能是通配符“*”。XMLHttpRequest 发起的请求的凭证模式由 withCredentials 属性控制
在我的 app.js 文件中,我像这样启动它
const express = require('express');
const app = express();
const https = require('https');
const io = require('sio').init(https);
var options = {
key: fs.readFileSync('./cert/nodejs.demo.net.key'),
cert: fs.readFileSync('./cert/ServerCertificate.cer')
};
https.createServer(options, app).listen(443,()=>{
console.log("listening secure via SSL on 443")
})
这是sio文件的内容
const socketio = require('socket.io');
let io;
module.exports = {
init: function(server) {
if (io) {
throw new Error("socket.io already initialized");
}
// initalize socket.io to this server
io = socketio(server);
// put other socket.io initialization code here
return io;
}
get: function() {
if (!io) {
throw new Error("socket.io has not yet been initialized");
}
return io;
}
}
那么我在哪里以及如何修复cor的错误呢?
解决方案
您的服务器应该允许 CORS 请求,请尝试使用CORS 模块:
// Enable All CORS Requests
const cors = require('cors')
app.use(cors())
使用您的代码:
const express = require('express');
const app = express();
const https = require('https');
const io = require('sio').init(https);
const cors = require('cors');
app.use(cors());
var options = {
key: fs.readFileSync('./cert/nodejs.demo.net.key'),
cert: fs.readFileSync('./cert/ServerCertificate.cer')
};
https.createServer(options, app).listen(443,()=>{
console.log("listening secure via SSL on 443")
})
推荐阅读
- javascript - 通过 $set 更改对象属性给出:“TypeError: Cannot read property 'call' of undefined”
- javascript - 指定 vuetify 网格的宽度
- javascript - 我有一个需要重组为所需格式的对象数组。我尝试使用迭代使用数组解构
- c# - 为什么 Serilog 在达到文件大小限制之前滚动文件?
- c++ - QuickFix C++:编译 Acceptor 时出错
- docker - 使用 Docker 容器托管非营利应用程序
- sql - 如果条目被多次完成,则需要在每种情况下获取第二条记录
- swift - 发布者发布操作进度和最终值
- gitlab - gitlab表格中文本的中心对齐
- sql - 在oracle sql中获取数组大小