Конфигурация Django CORS не работает, несмотря на настройку промежуточного ПО
Я столкнулся с проблемой настройки CORS (Cross-Origin Resource Sharing) в моем проекте Django. Несмотря на настройку параметров CORS в моем settings.py
и добавление CorsMiddleware
в список MIDDLEWARE
, я все еще сталкиваюсь с ошибками, связанными с CORS, при выполнении запросов из моего фронтенд-приложения.
Вот краткое описание моей конфигурации:
settings.py
(настройки CORS и CSRF):
# CORS
CORS_URLS_REGEX = r"^/api/.*$"
CORS_ALLOW_CREDENTIALS = True
CORS_ORIGIN_WHITELIST = config("CORS_ORIGIN_WHITELIST", cast=Csv(), default=["http://localhost:3000"])
CORS_ALLOWED_ORIGINS = config("CORS_ALLOWED_ORIGINS", cast=Csv(), default=["localhost:3000"])
CORS_ALLOW_ALL_ORIGINS = config("CORS_ALLOW_ALL_ORIGINS", default=True, cast=bool)
CORS_ALLOW_METHODS = (
"DELETE",
"GET",
"OPTIONS",
"PATCH",
"POST",
"PUT",
)
CORS_ALLOW_HEADERS = list(default_headers) + ["Set-Cookie"]
# CSRF
CSRF_TRUSTED_ORIGINS = config("CSRF_TRUSTED_ORIGINS", cast=Csv())
CSRF_USE_SESSIONS = False
SESSION_COOKIE_SECURE = False
CSRF_COOKIE_SECURE = False
CSRF_COOKIE_SAMESITE = None
SESSION_COOKIE_SAMESITE = None
settings.py
(ПРОМЕЖУТОЧНОЕ ПО):
MIDDLEWARE = (
"django.middleware.security.SecurityMiddleware",
"corsheaders.middleware.CorsMiddleware",
"whitenoise.middleware.WhiteNoiseMiddleware",
"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",
)
Несмотря на наличие этих настроек, при попытке выполнить запрос из моего фронтенд-приложения (https://example.com) к бэкенду Django (https://api.example.com/api/v1/), я получаю следующую ошибку:
Access to XMLHttpRequest at 'https://api.example.com/api/v1/' from origin 'https://example.com' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
Failed to load resource: net::ERR_FAILED
Также я получаю такой результат от Postman:
Версия Django: 4.2.1
django-cors-headers version: 4.3.1