#javascript #express #socket.io
#javascript #выразить #socket.io
Вопрос:
Я использую сокет.ввод-вывод и экспресс-js. Я хочу установить контроль доступа разрешить происхождение для подключения к сокету
Я попытался установить свойство origins при инициализации сокета
var io = require('socket.io')(http, {origins: 'http://www.example.com'})
На изображении выше для контроля доступа разрешить происхождение установлено значение *. Я хочу установить это на example.com (также обратите внимание, что метод запроса — GET)
Однако на этом изображении установлен заголовок access control allow origin (также обратите внимание, что метод запроса POST)
Как я могу добавить заголовок access control allow origin, когда метод запроса GET . Пожалуйста, помогите
Ответ №1:
Вы пробовали:
io.set('origins', 'http://yourdomain.com:80');
Или вы также можете попробовать server.origins
, как показано ниже:
io.origins((origin, callback) => {
if (origin !== 'https://foo.example.com') {
return callback('origin not allowed', false);
}
callback(null, true);
});
Возвращаясь true
, вы разрешаете происхождение. В противном случае отправьте сообщение об ошибке. Обратитесь к документам здесь
Ответ №2:
пожалуйста, попробуйте ниже в главном файле express
// Добавить заголовки app.use(функция (req, res, next) {
// Website you wish to allow to connect
res.setHeader('Access-Control-Allow-Origin', 'http://yourdomain.com:80');
// Request methods you wish to allow
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');
// Pass to next layer of middleware
next();
});
Ответ №3:
В Express вы можете использовать так:
app.all('*(or set for what way you exectly need)', function (req, res, next) {
res.setHeader('Access-Control-Allow-Origin', 'http://www.example.com');
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');
res.setHeader('Access-Control-Allow-Headers', 'your headers');
next();
});
Также в сокете.io вам не нужно указывать отдельно заголовки для POST или GET … это другой протокол связи. Вот пример для набора сокетов, который вы можете попробовать:
io.set( 'origins', '*www.example.com' );
Ответ №4:
Access-Control-Allow-Origin: http://example.com
Access-Control-Allow-Methods: GET
Access-Control-Allow-Headers: Content-Type
Комментарии:
1. Привет! Хотя это может быть решением вопроса, ответы только для кода, как правило, не рекомендуется использовать SO. Пожалуйста, уделите некоторое время редактированию вашего ответа с объяснением того, почему это решение, поскольку оно поможет OP и будущим посетителям сайта.