Как устранить ошибку CORS в платформе Socket.IO Django с использованием Python 2.7
Мы используем фронтенд и бэкэнд AngularJS и Django соответственно. Мы сталкиваемся с ошибкой CORS, так как мы добавили corsheaders в instal_app, а также добавили промежуточное программное обеспечение, но мы сталкиваемся с той же проблемой
Мы используем AngularJS v1.6.3, Django 1.10.11 и Python 2.7.
Угловой контроллер:
var socket = io.connect('http://192.168.13.129:8000/');
socket.on('connect', function (data) {
console.log('connected')
})
в django settings.py
INSTALLED_APPS = (
'corsheaders',
)
MIDDLEWARE = [
'corsheaders.middleware.CorsMiddleware',
'django.middleware.common.CommonMiddleware',
]
CORS_ORIGIN_ALLOW_ALL=True
Ожидаемый результат - запрос Socket.IO CORS, который будет успешно выполнен, но мы получаем следующую ошибку:
Доступ к XMLHttpRequest по адресу http://192.168.13.129:8000/socket.io/?EIO=3&transport=polling&t=MncX14t"из источника" http://192.168.13.148:8082/"заблокирован политикой CORS: нет" Заголовок Access-Control-Allow-Origin'присутствует в запрашиваемом ресурсе.
1 ответ
Быстрое и грязное решение, к которому многие люди обращаются с CORS, - отключить его, разрешив все источники. Но это открывает двери для уязвимостей, таких как CSRF-атаки против ваших пользователей.
В вашем случае я рекомендую вам включить только те источники, откуда вы ожидаете получать запросы. Из вашего примера правильная и безопасная конфигурация Socket.IO, которую вы хотите использовать, такова:
sio = socketio.Server(cors_allowed_origins="http://192.168.13.148:8082")
И если у вас есть дополнительные источники, просто сделайте приведенный выше аргумент списком и добавьте туда все свои источники. *
Это хорошо для внутренних тестов, но не является хорошей идеей для производственного сайта, если вы действительно не знаете, что делаете.