В запрошенном ресурсе Django и ReactJS отсутствует заголовок «Access-Control-Allow-Origin» - PullRequest
0 голосов
/ 18 декабря 2018

В настоящее время у меня есть Django 1.98 в качестве Backend и React в качестве Front End.

Я получаю эту ошибку:

Доступ к XMLHttpRequest в 'https://mywebsite:8000/uploads/vtt/' из источника' http://localhost:3000' заблокирован политикой CORS: НетЗаголовок «Access-Control-Allow-Origin» присутствует на запрошенном ресурсе.

Я установил django-cors-headers == 2.4.0 на моем virtualenviroment

Это мой settings.py файл:

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'uploads.core',
    'corsheaders',
]

MIDDLEWARE_CLASSES = [
    '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.auth.middleware.SessionAuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

CORS_ORIGIN_ALLOW_ALL = True

CSRF_TRUSTED_ORIGINS = ['http://127.0.0.1:3000','http://localhost:3000','http://localhost:8000','https://mywebsite:8000','https://myapp.firebaseapp.com','https://mywebsite:8088']
CSRF_COOKIE_NAME = "csrftoken"
CSRF_HEADER_NAME = [
    'HTTP_X_CSRFTOKEN'
]

SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
SECURE_SSL_REDIRECT = True
SESSION_COOKIE_SECURE = True
CSRF_COOKIE_SECURE = True

CORS_ORIGIN_WHITELIST = ['http://localhost:3000','https://mywebsite:8088']

CORS_ALLOW_METHODS = (
    'DELETE',
    'GET',
    'OPTIONS',
    'PATCH',
    'POST',
    'PUT',
)

CORS_ALLOW_HEADERS = (
    'accept',
    'accept-encoding',
    'authorization',
    'content-type',
    'dnt',
    'origin',
    'user-agent',
    'x-csrftoken',
    'x-requested-with',
)

Есть идеи, как это решить?Спасибо.

Ответы [ 3 ]

0 голосов
/ 10 марта 2019

django-cors-headers является достаточно надежным, и ваша конфигурация мне кажется правильной.

Однако есть одна проблема, с которой у меня тоже были проблемы: ваш каталог для загрузки, скорее всего, не обслуживается через Django, носервер напрямую в виде статического файла (лучшая практика и поведение почти по умолчанию в Django).Даже встроенный сервер разработки будет обслуживать статические файлы, не вызывая ваше приложение Django.

Поскольку ваше приложение не вызывается, django-cors-headers не может применить заголовок CORS к этим ответам.

0 голосов
/ 08 мая 2019

У меня была такая же проблема, и я думаю, что это проблема с:

SECURE_SSL_REDIRECT = True

Я не знаю последствий от его отключения, но установив его на:

SECURE_SSL_REDIRECT = False

Это устранит проблему с корсом.

0 голосов
/ 18 декабря 2018

Попробуйте добавить:

CORS_ORIGIN_WHITELIST = (
    'example.com',
    'localhost:3000',
    '127.0.0.1:3000',
    'more.domain.or.subdomains'
)

Не забудьте также добавить промежуточное ПО

MIDDLEWARE = [  # Or MIDDLEWARE_CLASSES on Django < 1.10
    ...
    'corsheaders.middleware.CorsMiddleware',
    'django.middleware.common.CommonMiddleware',
    ...
]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...