Вопрос проверяет понимание механизма защиты браузеров CORS и умение объяснить, как разрешать междоменные запросы.
CORS — это механизм безопасности браузера, который контролирует, какие домены могут отправлять запросы к вашему API. Он помогает предотвратить доступ веб-страниц к чужим сервисам без разрешения. Настройка обычно включает отправку заголовков Access-Control-Allow-Origin, Allow-Methods, Allow-Headers, а также обработку preflight-запросов OPTIONS. Правильная конфигурация позволяет безопасно работать с кросс-доменными API.
Определение: CORS — механизм, позволяющий серверу контролировать доступ браузерных клиентов из других доменов.
Браузер по умолчанию запрещает запросы с одного домена на другой (cross-origin), чтобы:
предотвратить кражу данных
запретить выполнение нежелательных запросов
ограничить XSS-атаки
То есть:
frontend.com → api.com (по умолчанию запрещено)
CORS — механизм, позволяющий разрешить безопасные типы таких запросов.
При cross-origin запросе браузер может:
Сделать обычный запрос (simple request)
Сделать preflight-запрос методом OPTIONS
Браузер спрашивает сервер:
OPTIONS /api/data
Origin: https://frontend.com
Access-Control-Request-Method: POST
Access-Control-Request-Headers: Authorization
Сервер должен ответить:
Access-Control-Allow-Origin: https://frontend.com
Access-Control-Allow-Methods: POST
Access-Control-Allow-Headers: Authorization
Если сервер не отвечает нужными заголовками — браузер блокирует запрос.
Access-Control-Allow-Origin
Указывает, какие домены разрешены.
Примеры:
Access-Control-Allow-Origin: *
Access-Control-Allow-Origin: https://frontend.com
Access-Control-Allow-Methods
Доступные методы: GET, POST, PUT, DELETE, PATCH
Access-Control-Allow-Headers
Список разрешённых клиентских заголовков: Authorization, Content-Type, X-Requested-With
Access-Control-Allow-Credentials
Разрешает передавать куки и авторизационные данные.
Access-Control-Allow-Credentials: true
Access-Control-Max-Age
Время кеширования preflight ответа.
На PHP:
php
header('Access-Control-Allow-Origin: https://frontend.com');
header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE');
header('Access-Control-Allow-Headers: Authorization, Content-Type');
Не использовать * при авторизации
Если нужны куки — нельзя использовать *.
Разрешать только нужные домены
Лучше список доменов, а не *.
Кешировать preflight
Чтобы уменьшить трафик OPTIONS.
Учитывать, что CORS работает только в браузере
Сервер-сервер запросы CORS не касаются.
CORS — механизм безопасности браузеров, который разрешает или блокирует cross-origin запросы. Настраивается через несколько заголовков и позволяет безопасно предоставлять API фронтендам на других доменах.