Борьба с политикой CORS с использованием сокета.ввод-вывод nodejs

#node.js #socket.io #cors #nodejs-server

#node.js #socket.io #cors #nodejs-сервер

Вопрос:

Я нашел много информации о проблеме политики CORS, но ничего не помогло, даже когда я перепробовал все решения, которые я нашел здесь.

Моя последняя попытка была сделана на сервере nodejs:

 var express = require('express');
var app = express();

var spawn = require('child_process').spawn;
var fs = require('fs');

app.use(express.static('public'));

const server = require('https').createServer({
    key: fs.readFileSync('/home/example/ssl/keys/c231f_0ca89_7b80bf6d84934d212df326eee9c6319f.key'),
    cert: fs.readFileSync('/home/example/ssl/certs/streaming_desytec_com_c231f_0ca89_1609334228_a73b63988075270c9f680f383b6e6a99.crt')
}, app);

var io = require('socket.io')(server);
io.set('origins', 'https://localhost:44356');
  

Несмотря на мои усилия по решению этой проблемы, я всегда получаю эту ошибку в сокете.клиент ввода-вывода:

Access to XMLHttpRequest at 'https://streaming.example.com/socket.io/?framespersecond=15amp;audioBitrate=22050amp;EIO=3amp;transport=pollingamp;t=NJbfyAD' from origin 'https://localhost:44356' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

Как я могу действительно решить эту проблему?

Мой веб-сайт находится на локальном хостинге, а сервер nodejs работает на удаленном сервере Linux.

РЕДАКТИРОВАТЬ: у меня есть эта последняя попытка:

 var cors = require('cors')

var corsOptions = {
  origin: 'https://localhost:44356',
  optionsSuccessStatus: 200 // some legacy browsers (IE11, various SmartTVs) choke on 204
}

app.use(cors());
app.get('/socket.io/', cors(corsOptions), function (req, res, next) {
  res.json({msg: 'This is CORS-enabled for all origins!'})
})

app.use(express.static('public'));
  

он по-прежнему не работает. Мне интересно, является ли этот app.get вызов, который я написал, правильным, учитывая, что URL-адрес сервера будет:

/socket.io/?framespersecond=15amp;audioBitrate=22050amp;EIO=3amp;transport=pollingamp;t=NJbfyAD

Комментарии:

1. Ошибка буквально говорит вам, в чем проблема: вы пытаетесь получить доступ https://streaming.example.com с http://localhost , поэтому, если вы не настроили сервер , который работает as streaming.example.com (насколько ему известно), для отправки Access-Control-Allow-Origin заголовка со значением, позволяющим localhost использовать его ресурсы, здесь ничего не произойдет.

2. eeeeehm….. Я, конечно, знаю причину, но чего я не знаю, так это решения, я перепробовал все на своем сервере nodejs, но я не получаю этот заголовок для отправки

3. кстати, я также установил модуль cors и использовал app.use(cors()), но безрезультатно. Чего я не делал, так это не проверял его с помощью `app.get(‘/ products/: id’, function (req, res, next) {… Я сделаю это следующим.

4. Я изменил вопрос с помощью последней попытки с использованием модуля CORS.

5. app.use(cors()) с какими параметрами? И тогда какие заголовки вы видите на вкладке «Сеть» инструментов разработчика при нажатии на запрос?

Ответ №1:

 yourapp.use(
  cors({
    origin: (origin, callback) => callback(null, true),
    credentials: true // if using cookies
  })
);
  

Вы можете управлять им в зависимости от вашей среды.