如何解决CORS政策的问题

问题描述 投票:0回答:1

我做了一个项目想要使用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');

连接服务器 另一个目录是 socket.io 的服务器,代码如下:
服务器.js

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());
javascript node.js express socket.io
1个回答
0
投票

根据 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!');
});
© www.soinside.com 2019 - 2024. All rights reserved.