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 объясняет детали