我做了一个项目想要使用socket.io。 现在我在浏览器控制台中出现错误:
从源“https://www.escootrent.com”访问“https://back.escootrent.com/socket.io/?EIO=4&transport=polling&t=OwxDnkM”处的 XMLHttpRequest 已被 CORS 策略阻止:否请求的资源上存在“Access-Control-Allow-Origin”标头。
你如何看到我使用我的子域,一切都崩溃了。 Awary 域链接及其目录。
客户端目录是 html、css、js、php 上的基本 Web 应用程序。现在使用
io('https://back.escootrent.com/socket.io');
const express = require('express');
const https = require('https');
const fs = require('fs');
const app = express();
const options = {
key: fs.readFileSync('./_.escootrent.com_private_key.key'),
cert: fs.readFileSync('./escootrent.com_ssl_certificate.cer')
};
const server = https.createServer(options, app);
const io = require('socket.io')(server);
app.get('/chats', function(req, res) {
res.send('answ');
});
io.on('connection', socket => {
console.log('User connected', socket.id);
})
io.on('disconnect', () => {
console.log('User disconnected', socket.id);
});
server.listen(443, (err) => {
if (err) {
throw Error(err);
}
console.log('Server started!');
});
所有这些都基于 OpenServer 并适用于本地参数,但不适用于域。
我尝试过,但没有任何改变
app.use((req, res, next) => {
res.setHeader('Access-Control-Allow-Origin', 'https://www.escootrent.com');
res.setHeader('Access-Control-Allow-Methods', 'GET, POST');
res.setHeader('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept');
next();
});
io.origins((origin, callback) => {
if (origin === 'https://www.escootrent.com') {
callback(null, true);
} else {
callback('Origin not allowed', false);
}
});
const cors = require('cors');
app.use(cors());
根据 doc
io.origins
已贬值,因此删除此
io.origins((origin, callback) => { // ❌
if (origin === 'https://www.escootrent.com') {
callback(null, true);
} else {
callback('Origin not allowed', false);
}
});
将初始化更改为
const io = require('socket.io')(server,{ // ✅
cors: {
origin: "https://escootrent.com"
}
});
完整代码
const express = require('express');
const https = require('https');
const fs = require('fs');
const cors = require('cors');
const app = express();
app.use(cors());
const options = {
key: fs.readFileSync('./_.escootrent.com_private_key.key'),
cert: fs.readFileSync('./escootrent.com_ssl_certificate.cer')
};
const server = https.createServer(options, app);
const io = require('socket.io')(server,{
cors: {
origin: "https://escootrent.com"
}
});
app.get('/chats', function(req, res) {
res.send('answ');
});
io.on('connection', socket => {
console.log('User connected', socket.id);
})
io.on('disconnect', () => {
console.log('User disconnected', socket.id);
});
server.listen(443, (err) => {
if (err) {
throw Error(err);
}
console.log('Server started!');
});