Причина: CORS-заголовок 'Access-Control-Allow-Origin' отсутствует Ошибка в django
В последнее время я столкнулся с проблемой CORS в своем проекте django. Я выполнил все необходимые шаги, например, установил django-cors-headers, и вот мой settings.py:
INSTALLED_APPS = [
'rest_framework', # dasti ezafe shod
'rest_framework_simplejwt',
'corsheaders',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'carat', # dasti ezafe shod
'data',
'price',
'users',
'marketplace'
]
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',
]
CORS_ORIGIN_WHITELIST = (
'https://example.com',
'https://web.example.com',
)
Мы создали веб-приложение flutter и развернули его на web.mydomain.com. С самого начала я столкнулся с ошибками CORS, но как только я ввел эти настройки, все они исчезли, кроме одной ошибки:
Заблокирован кросс-оригинальный запрос: Политика одинакового происхождения запрещает чтение удаленного ресурса по адресу https://example.com/media/images/image0_WEEP09I.png. (Причина: отсутствует CORS-заголовок 'Access-Control-Allow-Origin'). Код состояния: 200. Я вижу эту ошибку на вкладке консоли инспектора в firefox.
Вот часть ответа моего сервера:
HTTP/2 200 OK
Content-Type: application/json
Vary: Accept, origin,Accept-Encoding
Allow: GET, HEAD, OPTIONS
X-Frame-Options: DENY
X-Content-Type-Options: nosniff
Referrer-Policy: same-origin
Cross-Origin-Opener-Policy: same-origin
Access-Control-Allow-Origin: https://web.example.com
Access-Control-Allow-Credentials: true
Content-Length: 1884
Date: Sat, 03 Feb 2024 22:01:07 GMT
Alt-Svc: h3=":443"; ma=2592000, h3-29=":443"; ma=2592000, h3-Q050=":443"; ma=2592000, h3-Q046=":443"; ma=2592000, h3-Q043=":443"; ma=2592000, quic=":443"; ma=2592000; v="43,46
` Я действительно запутался, кто-нибудь может подсказать мне, как это исправить?
Я добавил этот код:
def options(self, request):
response = Response()
response["Access-Control-Allow-Origin"] = "https://example.com"
response["Access-Control-Allow-Methods"] = "GET, OPTIONS"
response["Access-Control-Allow-Headers"] = "authorization"
return response
в моем классе для поддержки запроса опций.
Вы должны предоставить список источников, а не кортеж. Также CORS_ORIGIN_WHITELIST устарел и вы должны использовать CORS_ALLOWED_ORIGINS, как показано ниже :
CORS_ALLOWED_ORIGINS = [
'https://example.com',
'https://web.example.com',
]