Почему разработчики не понимают CORS
CORS — один из самых неправильно понимаемых инструментов безопасности в веб-разработке. Многие разработчики думают, что он защищает их сервер. Это не так.
CORS защищает пользователя.
Браузер применяет политику единого источника (Same-Origin Policy, SOP). Эта политика мешает вредоносным сайтам отправлять запросы на другие сайты от вашего имени. CORS — это просто способ, с помощью которого сервер сообщает браузеру, что это правило можно ослабить для определенных сайтов.
Если ваш запрос работает в Postman, но не проходит в браузере, значит, у вас проблема с CORS. Postman не является браузером, поэтому он не применяет эти правила.
Распространенные ошибки, которых следует избегать:
- Использование CORS как единственного средства защиты. CORS — это не аутентификация. Вам все равно нужны токены, пароли и ограничение частоты запросов (rate limiting).
- Ловушка подстановочного знака (wildcard). Вы не можете использовать Access-Control-Allow-Origin: * , если вам нужно отправлять куки или учетные данные. Вы должны указать точный домен.
- Игнорирование предварительных (preflight) запросов. Браузеры отправляют автоматический запрос OPTIONS перед многими вызовами API. Если ваш сервер блокирует OPTIONS, ваш основной запрос завершится ошибкой.
- Отсутствие заголовков ошибок. Если ваш API возвращает ошибку 401 или 500 без заголовков CORS, браузер скроет реальную ошибку. Вы увидите только общее сообщение о CORS.
Как это исправить:
- Обрабатывайте запросы OPTIONS. Убедитесь, что ваш сервер возвращает статус 200 или 204 для предварительных вызовов.
- Используйте middleware. Настройте CORS на уровне middleware, чтобы он охватывал все ответы, включая ошибки.
- Установите заголовок Vary. Если вы динамически разрешаете несколько источников (origins), вы должны добавить Vary: Origin в свой ответ.
- Используйте правильные инструменты. Для Node.js используйте пакет cors. Для Django используйте django-cors-headers.
Перестаньте пытаться обойти CORS с помощью расширений для браузера. Вместо этого исправьте конфигурацию своего сервера.
Источник: https://dev.to/onsen/why-developers-dont-understand-cors-and-how-to-fix-it-19d5
Дополнительное обучающее сообщество: https://t.me/GyaanSetuAi