Ответ
CORS (Cross-Origin Resource Sharing) — это механизм безопасности браузеров, который использует HTTP-заголовки, чтобы разрешить или запретить веб-приложению, работающему на одном источнике (origin), запрашивать ресурсы с другого источника.
Почему это важно? Браузеры по умолчанию блокируют межсайтовые HTTP-запросы (например, с https://client.com к https://api.example.com) в соответствии с политикой Same-Origin Policy. CORS позволяет серверу явно указать, какие внешние источники могут получать к нему доступ.
Как это работает? Сервер должен включать специальные заголовки в свои ответы:
Access-Control-Allow-Origin: https://client.com
Access-Control-Allow-Methods: GET, POST, PUT
Access-Control-Allow-Headers: Content-Type, Authorization
Пример ошибки в браузере:
Access to fetch at 'https://api.example.com/data' from origin 'https://client.com' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
Ключевые моменты для тестирования:
- Preflight-запросы (OPTIONS): Для "непростых" запросов (например, с кастомными заголовками) браузер сначала отправляет запрос методом
OPTIONS, чтобы проверить разрешённые сервером методы и заголовки. - Учёт учётных данных: Запросы с куками или заголовками авторизации требуют дополнительного заголовка
Access-Control-Allow-Credentials: trueи конкретного указанияAccess-Control-Allow-Origin(нельзя использовать*). - Кэширование preflight: Заголовок
Access-Control-Max-Ageпозволяет браузеру кэшировать ответ на preflight-запрос.