Как устранить ошибку 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")

И если у вас есть дополнительные источники, просто сделайте приведенный выше аргумент списком и добавьте туда все свои источники. * Это хорошо для внутренних тестов, но не является хорошей идеей для производственного сайта, если вы действительно не знаете, что делаете.

Другие вопросы по тегам