привет,
как удалить заголовок ответа Access-Control-Allow-Origin
?
похоже в настройках {'origins' : 'asfdasd.com'}
не работает.
POST /socket.io/?EIO=3&transport=polling&t=1481690658797-5&sid=Dp18NNt_bWPkB4rGAAAP HTTP / 1.1
Происхождение: https://evilhost.net
HTTP / 1.1 400 неверный запрос
Тип содержимого: приложение / json
Access-Control-Allow-Credentials: правда
Доступ-Контроль-Разрешить-Происхождение: https://evilhost.net
Дата: пт, 3 февраля 2017 г., 12:27:42 GMT
Подключение: keep-alive
Кодирование передачи: фрагментированное
Та же ошибка
@Kenzku @thEpisode Какую версию socket.io вы используете?
Это должно быть исправлено в 2.x
(включая https://github.com/socketio/engine.io/pull/452).
Привет, @darrachequesne, спасибо за ответ. Я создатель сайта Crawler (https://www.crawlersite.com), и мы используем Socket.io для отправки данных на наши серверы, и вся наша инфраструктура находится в Microsoft Azure, все тестовые и первые бета-тестеры используют Azure, а у нас нет Нет проблем, но новый бетатестер использовал другого поставщика облачных услуг, и он сообщил об ошибке. Проблема в CORS, все вопросы читаем в гугле !! При поиске решений мы замечаем, что Socket.io обновлен до версии 2.0 (точно до версии 2.0.1 на сервере), мы обновляем клиент и сервер, но проблема сохраняется, мы используем Express, который также сообщил о проблемах с CORS, и мы их решили.
Мы очень разочарованы, потому что все решения в Google не помогли решить проблему, извините за то, что не разместили это на GitHub issues или StackOverflow, но мы хотим предоставить все подробности, которые можно решить. Некоторые URL-адреса для тестирования:
Backend URI: http://crawlerbackend.azurewebsites.net
Тестирование Express CORS: https://testcors.000webhostapp.com (этот хостинг используется тестером)
Тестирование Socket.io CORS: https://testcrawlersite.000webhostapp.com (см. Консоль)
Наш основной сайт для тестирования: http://crawler-test.azurewebsites.net (с новыми модификациями также не работает)
Файл Socket.io: http://crawlerbackend.azurewebsites.net/socket.io.js
Часть нашего app.js:
`
var path = require ('путь');
var bodyParser = require ('body-parser');
var cors = require ('cors');
var express = require ('экспресс');
вар приложение = экспресс ();
// use body parser so we can get info from POST and/or URL parameters
app.use(bodyParser.urlencoded({ extended: true })); // support encoded bodies
app.use(bodyParser.json()); // support json encoded bodies
app.use(cors({ origin: '*' }));
// Settings for CORS
app.use(function (req, res, next) {
// Website you wish to allow to connect
res.header('Access-Control-Allow-Origin', '*');
// Request methods you wish to allow
res.header('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');
// Request headers you wish to allow
res.header('Access-Control-Allow-Headers', 'X-Requested-With,content-type');
// Set to true if you need the website to include cookies in the requests sent
// to the API (e.g. in case you use sessions)
res.setHeader('Access-Control-Allow-Credentials', false);
// Pass to next layer of middleware
next();
});
var server = app.listen(cross.NormalizePort(process.env.PORT || 3500));
var io = require('socket.io').listen(server, {
log: false,
agent: false,
origins: '*:*',
transports: ['websocket', 'htmlfile', 'xhr-polling', 'jsonp-polling', 'polling']
});
`
Проблема решена!! @Kenzku, пожалуйста, просмотрите эту документацию: https://github.com/socketio/socket.io/blob/master/docs/API.md#serveroriginsvalue и посмотрите код: https://github.com/socketio/socket.io /blob/master/lib/index.js#L67 и проверьте, используете ли вы Express (этот пример очень полезен): https://github.com/socketio/socket.io#in -conjunction-with-express
Большой! Думаю, мы можем закрыть вопрос сейчас.
@thEpisode Я понимаю, что это старая ветка, но именно эта последняя ссылка исправила ее для меня! В большинстве руководств по Express есть app.listen(...)
но в случае использования socket.io
вы должны быть уверены, что в вашем index.js
вы вызываете http.listen(...)
и НЕ слушаете объект app
, или вы получите эту проблему CORS. Такая мелочь!
@frewinchristopher Я следую тому же шаблону, что и вы упомянули выше, локально он работает нормально, но на удаленном он выдает (Причина: запрос CORS не удался). где я не прав ..?
@gowthamyaal не могли бы вы показать нам свой код?
Спасибо за вашу озабоченность, но проблема CORS решена, так как я использовал AWS, возник конфликт с эластичным IP-адресом и локальным IP-адресом, позже я изменил IP-адрес прослушивания сокета на 0.0.0.0, это решило мою проблему.
Теперь, столкнувшись с проблемой состояния гонки в удаленном режиме, я использую webpack-dev-config, я пытался использовать io connect и выдавать код в том же файле, но в итоге получил неопределенную ошибку
webpack-dev-config
прокомментированные строки действительно сработали для меня .... может ли кто-нибудь помочь мне с этим .... заранее спасибо
Я воспользовался всеми решениями, которые смог найти, но до сих пор не отправил рабочий ответ. Если бы кто-нибудь мог взглянуть, я был бы очень признателен.
`const express = require ('экспресс')
const http = require ('http')
const socketIO = требуется ('socket.io')
const cors = require ('cors')
// Хост-порт
const порт = 3001
const приложение = экспресс ()
app.use (cors ())
// Экземпляр сервера
const server = http.createServer (приложение)
// Создание сокета с использованием экземпляра сервера
const io = socketIO (сервер)
io.origins ("http: // localhost: 3000")
io.on ('соединение', socket => {
console.log ("Пользователь подключен")
socket.on('disconnect', () => {
console.log("User Disconnected")
})
socket.on('send message', (message) => {
io.sockets.emit('send message', message)
})
})
server.listen (порт, () => console.log ( Listening on port ${port}
)) `
Самый полезный комментарий
@thEpisode Я понимаю, что это старая ветка, но именно эта последняя ссылка исправила ее для меня! В большинстве руководств по Express есть
app.listen(...)
но в случае использованияsocket.io
вы должны быть уверены, что в вашемindex.js
вы вызываетеhttp.listen(...)
и НЕ слушаете объектapp
, или вы получите эту проблему CORS. Такая мелочь!