Как установить контроль доступа разрешить происхождение в socket io

#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 и будущим посетителям сайта.