#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
, поэтому, если вы не настроили сервер , который работает asstreaming.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
})
);
Вы можете управлять им в зависимости от вашей среды.