SobesLab логотип SobesLab

CORS (Cross-Origin Resource Sharing) — это механизм, который позволяет браузерам ограничивать доступ к ресурсам, находящимся на других доменах. Он играет важную роль в безопасности веб-приложений, предотвращая потенциальные атаки на данные.

Простые запросы

Простой запрос — это HTTP-запрос, который удовлетворяет определённым условиям и не требует предварительной проверки (preflight). К простым запросам относятся:

  • Метод: GET, POST, HEAD
  • Заголовки: только стандартные заголовки, такие как Accept, Content-Type (с ограничениями на значения), и другие.

Пример простого запроса:

GET /resource HTTP/1.1
Host: example.com
Origin: http://yourdomain.com

В этом примере браузер отправляет запрос на ресурс с сервера example.com, указывая, что он пришёл с http://yourdomain.com. Если сервер разрешает доступ, он должен вернуть заголовок Access-Control-Allow-Origin, содержащий значение http://yourdomain.com или * (все источники).

Preflight запросы

Preflight запрос — это предварительный запрос, который отправляется браузером перед основным запросом для проверки разрешений на доступ к ресурсу. Он используется для запросов, которые не являются простыми.

Условия для preflight:

  • Метод: любой, кроме простых (например, PUT, DELETE)
  • Заголовки: если используются нестандартные заголовки или заголовки, не входящие в список стандартных.

Пример preflight запроса:

OPTIONS /resource HTTP/1.1
Host: example.com
Origin: http://yourdomain.com
Access-Control-Request-Method: POST
Access-Control-Request-Headers: X-Custom-Header

В этом запросе браузер отправляет OPTIONS запрос, чтобы узнать, разрешает ли сервер выполнение POST-запросов с нестандартным заголовком X-Custom-Header. Если сервер поддерживает указанные методы и заголовки, он отвечает с соответствующими заголовками:

HTTP/1.1 204 No Content
Access-Control-Allow-Origin: http://yourdomain.com
Access-Control-Allow-Methods: POST
Access-Control-Allow-Headers: X-Custom-Header

Распространённые ошибки

  1. Отсутствие заголовков CORS на сервере: Если сервер не возвращает необходимые заголовки, браузер заблокирует доступ к ресурсу.
  2. Неверный метод или заголовок в preflight: Если в preflight-запросе указаны методы или заголовки, которые не поддерживает сервер, это также вызовет ошибку.
  3. Использование wildcard (*) с Credentials: Возвращение Access-Control-Allow-Origin: * вместе с Access-Control-Allow-Credentials: true приведёт к ошибке, так как это противоречит правилам CORS.

Практические советы

  • Убедитесь, что сервер правильно настроен для обработки CORS-заголовков.
  • При необходимости используйте инструменты для тестирования API, такие как Postman, чтобы проверить CORS-ответы.
  • Изучите логи сервера для отладки проблем с CORS, чтобы увидеть, какие заголовки возвращаются и какие запросы приходят.
  • Не забывайте об безопасности: не открывайте доступ ко всем источникам, если это не требуется, и применяйте строгие правила для разрешённых доменов.

Понимание различий между простыми запросами и preflight-запросами является ключевым для успешной работы с CORS и безопасным взаимодействием между клиентами и серверами.

Как расширить ответ на собеседовании

Добавьте практический пример

Поделитесь кейсом из проекта, где вы применяли знание из вопроса. Структура: задача → действия → результат.

Укажите альтернативы

Расскажите о вариантах реализации, плюсах и минусах, а также о критериях выбора подхода.

Сделайте вывод

Завершите ответ кратким резюме: где применимо, какие риски и что важно помнить на практике.

Рекомендуемые категории

Дополнительные материалы