CORS (Cross-Origin Resource Sharing) - это механизм, который ограничивает или разрешает взаимодействие между веб-приложениями, работающими на разных доменах. В случае, когда ваше React-приложение (работающее на одном домене) пытается сделать GET-запрос на Django-сервер (работающий на другом домене), возникает CORS-ошибка.
Прежде всего, необходимо понимать, что CORS - это механизм безопасности, предотвращающий междоменные запросы с использованием ajax и fetch API. Он реализует политику одного источника (Same-Origin Policy), согласно которой браузеры позволяют запросы только к ресурсам того же источника.
По умолчанию, браузеры запрещают междоменные запросы из соображений безопасности. Однако, вы можете настроить Django-сервер для разрешения этих запросов.
В Django есть несколько способов решения проблемы с CORS. Один из них - использование стороннего пакета django-cors-headers, который предоставляет простые инструменты для добавления заголовков CORS к вашим ответам сервера.
Гайд по установке django-cors-headers:
1. Установите пакет с помощью утилиты pip:
pip install django-cors-headers
2. Добавьте 'corsheaders' в INSTALLED_APPS в файле настроек Django:
INSTALLED_APPS = [ ... 'corsheaders', ... ]
3. Включите промежуточное ПО Middleware в файле настроек Django (после 'django.middleware.common.CommonMiddleware'):
MIDDLEWARE = [ ... 'corsheaders.middleware.CorsMiddleware', 'django.middleware.common.CommonMiddleware', ... ]
4. Добавьте настройки CORS в файл настроек Django:
CORS_ORIGIN_ALLOW_ALL = True
Это позволит разрешить все междоменные запросы. Если вы хотите ограничить доступ только для определенных доменов, вы можете установить это значение в False и указать список разрешенных доменов в настройке CORS_ORIGIN_WHITELIST.
После применения этих изменений, Django добавит нужные заголовки CORS к своим ответам, позволяя вашему React-приложению сделать GET-запрос.
Однако, имейте в виду, что включение CORS может создать уязвимости безопасности. Будьте осторожны и убедитесь, что вы разрешаете только необходимые домены и методы запросов.