Что такое CORS в контексте веб-разработки?

«Что такое CORS в контексте веб-разработки?» — вопрос из категории API тестирование, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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.

Ключевые моменты для тестирования:

  1. Preflight-запросы (OPTIONS): Для "непростых" запросов (например, с кастомными заголовками) браузер сначала отправляет запрос методом OPTIONS, чтобы проверить разрешённые сервером методы и заголовки.
  2. Учёт учётных данных: Запросы с куками или заголовками авторизации требуют дополнительного заголовка Access-Control-Allow-Credentials: true и конкретного указания Access-Control-Allow-Origin (нельзя использовать *).
  3. Кэширование preflight: Заголовок Access-Control-Max-Age позволяет браузеру кэшировать ответ на preflight-запрос.