Я использую expressjs и добавил проверку cors для всех источников.
const options = {
origin: ['*'],
credentials: true,
exposedHeaders: false,
preflightContinue: false,
optionsSuccessStatus: 204,
methods: ['GET', 'POST'],
allowedHeaders: allowedHeaders,
};
module.exports = cors(options);
Это позволяет включить один из двух запросов CORS, которые я использую, один из которых является ответом от сервера, а другой является сокетом.
Я использую angular наблюдаемый, чтобы получить ответ как.
const headers = {
// Host: '',
};
return this.http.get(`${environment.BASE_URL}:${_port}`,
{ headers, observe: 'response' });
}
Запрос, который не является сокетом, отправляет правильный ответ. Однако тот, у которого есть сокет, посылает мне другой объект.
Но я также получаю правильный ответ от сокета, если я просматриваю вкладку сети.
См. Скриншоты ниже.
https://prnt.sc/qlq9up (недействительный CORS)
https://prnt.sc/qlqd88 (заголовок ответа на вкладке сети)
Этот заголовок можно получить, если включить расширение CORSe в моем браузере Firefox.
EDIT : Я не использую Socket.io, а скорее веб-сокет websocket = require('ws');
ОТВЕТ : Моя проблема была логической ошибкой.
Это не совсем то, что решило мою проблему, потому что я использовал websocket, а не socket.io, однако, это заставило меня осознать свою проблему, я отдельно слушал websocket и https и смог исправить это, как только я добавлена опция использования cors в websocket