Включение CORS (запроса кросс-происхождения) в Django

Я пытаюсь использовать API-интерфейс overpass http://wiki.openstreetmap.org/wiki/Overpass_API с JavaScript XMLHttpRequest в проекте, работающем на Django, но я продолжаю получать

 Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://www.google.com/accounts/ClientLogin. (Reason: CORS header 'Access-Control-Allow-Origin' missing). 

ошибка. Я получаю эту ошибку независимо от того, использую ли я GET или POST, и с любого другого хоста, а не только API-интерфейса overpass.

Я установил django-cors-headers https://github.com/ottoyiu/django-cors-headers и следовал приведенным там инструкциям, поместив 'corsheaders' в INSTALLED_APPS, а 'corsheaders.middleware.CorsMiddleware', 'django.middleware.common.CommonMiddleware' в MIDDLEWARE_APPS, и я установил

CORS_ORIGIN_ALLOW_ALL = true 

в settings.py, но ничего не работает. Я запускаю его локально с помощью

python manage.py runserver

но я также размещаю его на openshift. Ни один из них не работает, они оба дают ошибку выше.

Пожалуйста, дайте мне знать, если я что-то пропустил здесь.


person Abendsen    schedule 20.07.2016    source источник
comment
Вы получаете эту ошибку в javascript, который пытается получить доступ к openstreetmap/overpass?   -  person Jaromanda X    schedule 20.07.2016
comment
Да, я пытаюсь использовать XmlHttpRequest в javascript.   -  person Abendsen    schedule 20.07.2016
comment
Это очевидно, не отвечает на вопрос. Я спрашиваю, является ли сайт, на котором вы пытаетесь включить CORS, сайтом, который получает запросы из другого источника или отправляет запросы в другой источник... т.е. какой URL-адрес получает ошибку CORS   -  person Jaromanda X    schedule 21.07.2016
comment
Возможный дубликат stackoverflow.com/q/35760943/10140011   -  person Hemant Malik    schedule 10.02.2021
comment
Отвечает ли это на ваш вопрос? Как включить CORS в Django REST Framework   -  person Hemant Malik    schedule 10.02.2021


Ответы (3)


У меня возникла та же проблема при попытке доступа к моему Django Rest Framework API, размещенному на Heroku, с моего ноутбука (localhost). Я использую Django 1.10.2, DRF 3.4.7 и python v3.4.

Я сделал pip install django-cors-headers (версия 1.2.2) и настроил его, как говорится в документах. а потом опять та же ошибка :(

Продолжайте искать несколько часов, и тут меня осенило!

Я сделал pip install django-cors-middleware (версия 1.3.1) без удаления пакета django-cors-headers. Также я ничего не трогал в своем settings.py файле (он был сконфигурирован как django-cors-headers настройки, хотя у этих двух пакетов не так много отличий - последний является ответвлением первого).

Нажмите «Обновить» (с локального хоста), и все заработало блестяще!

Теперь я смог получить данные из myapp.herokuapp.com с помощью метода ajax jQuery.

person nik_m    schedule 21.10.2016
comment
Почему это сработает? django-cors-header и django-cors-middleware не зависят друг от друга, так зачем нужны оба? Это сработало для меня... но я не понимаю, почему. - person inostia; 16.11.2019
comment
На самом деле, django-cors-middleware является ответвлением django-cors-headers (они упоминают об этом в своих документах). Итак, вот как это работает! - person nik_m; 16.11.2019

CORS_ORIGIN_ALLOW_ALL = истина

должно быть:

CORS_ORIGIN_ALLOW_ALL = Истина

T заглавная буква для True. Добавьте дополнительное необходимое промежуточное ПО

MIDDLEWARE = ['corsheaders.middleware.CorsMiddleware',
'django.middleware.common.CommonMiddleware', ]

и зарегистрируйте «corsheaders» в INSTALLED_APPS.

person JSalys    schedule 13.02.2020
comment
куда добавить CORS_ORGIN_ALLOW_ALL = TRUE. - person SULPHURIC ACID; 26.05.2021

Не забудьте поставить «corsheaders.middleware.CorsMiddleware» в начало списка, а также «django.middleware.common.CommonMiddleware» уже является стандартным промежуточным ПО.

MIDDLEWARE = [
'corsheaders.middleware.CorsMiddleware',
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
 ]
person Pedro Fam    schedule 10.02.2020