Django Python rest, нет заголовка "Access-Control-Allow-Origin" присутствует на запрошенном ресурсе в chrome, работает в firefox
Я изучил и прочитал немало сообщений Stackoverflow по той же проблеме. Никто не разрешил мою проблему.
Моя проблема в том, что я получаю заголовок "... Нет" Access-Control-Allow-Origin 'присутствует на запрошенной ресурсе... "в моей консоли.
Я использую:
Версия Chrome 57.0.2987.133 Firefox версии 52.0.2
Python 2.7 Django 1.11a1
AngularJS
Я использую MAMP для обслуживания своих фронтовых инструментов Angular и сервера django для бэкэнда.
В моих настройках django я включил промежуточное программное обеспечение cors и попробовал как белый подход, так и установил все в true:
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'corsheaders.middleware.CorsMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
CORS_ORIGIN_ALLOW_ALL = True
На google chrome я до сих пор получаю эту ошибку:
localhost/: 1 XMLHttpRequest не может загрузить {my endpoint url}. Перенаправление с {my endpoint url} на {my endpoint url with a} заблокировано политикой CORS: заголовок "Access-Control-Allow-Origin" присутствует на запрошенном ресурсе. Поэтому Origin {requesting url} не допускается.
Он работает надлежащим образом в Firefox, и я не могу понять, почему он не будет работать на Google Chrome. Я не пробовал другие типы браузеров. Любая помощь будет очень признательна, спасибо.
Ответы
Ответ 1
Установите пакет cors-headers с помощью
pip install django-cors-headers
Добавляет в свои установленные приложения
INSTALLED_APPS = [
...
'corsheaders',
...
]
Добавить в свой СРЕДНЕГО ОБЕСПЕЧЕНИЯ
не забудьте добавить в качестве первого в списке
MIDDLEWARE = [
'corsheaders.middleware.CorsMiddleware',
'django.middleware.common.CommonMiddleware',
...
]
Перед установкой приложений включите эту конфигурацию, чтобы любой мог получить доступ
CORS_ORIGIN_ALLOW_ALL=True
Или создайте список хитов
CORS_ORIGIN_WHITELIST = [
'google.com',
'hostname.example.com',
'localhost:8000',
'127.0.0.1:9000'
]
Ответ 2
Сначала проверьте URL-адрес вашего запроса. У меня возникла эта проблема при использовании vue-resource. И тогда я не вижу "/" в конце или URL-адресе.
Ответ 3
Убедитесь, что вы используете 127.0.0.1
НЕ localhost
, потому что при использовании браузера localhost
может искать адрес IPv6...
или установите localhost
для явного обращения к 127.0.0.1
в /etc/hosts
Ответ 4
Возможно, вам нужно взглянуть на то, как вы звоните своим посредникам. Если они не в правильной последовательности, они могут выбросить эту ошибку. Кажется, что ваш 'django.middleware.security.SecurityMiddleware'
должен быть 'corsheaders.middleware.CorsMiddleware'
ниже 'corsheaders.middleware.CorsMiddleware'
. Кроме того, похоже, что вам, возможно, придется добавить CORS_ALLOW_CREDENTIALS = True
в свой код.
Надеюсь это поможет.
Ответ 5
причина, по которой просматривается хром; вы можете установить приложение CORS Toggle в Chrome или развернуть свой веб-код на nginx или apache, а затем использовать хром.
Ответ 6
Вы можете установить приложение django-cors-headers и в settings.py вы должны поместить 'corsheaders'
в INSTALLED_APPS и
'corsheaders.middleware.CorsMiddleware',
'django.middleware.common.CommonMiddleware',
при запуске MIDDLEWARE настроек
README ссылки Github объясняет детали