Как CORS обрабатывается на сервере?
DOM и браузер
CORS обрабатывается на сервере через ответные заголовки `Access-Control-Allow-, которыми сервер разрешает доступ определённым origin, методам и заголовкам. Для сложных запросов сервер отвечает на preflight OPTIONS`.**
Основные заголовки ответа
Access-Control-Allow-Origin: https://app.com # какому origin можно
Access-Control-Allow-Methods: GET, POST, PUT # какие методы
Access-Control-Allow-Headers: Content-Type, Authorization # какие заголовки
Access-Control-Allow-Credentials: true # разрешить cookie/credentials
Access-Control-Max-Age: 86400 # кеш preflightОбработка preflight
Для сложных запросов браузер шлёт OPTIONS. Сервер должен на него ответить с нужными заголовками и статусом 204/200, иначе основной запрос заблокируется.
// Express
app.use((req, res, next) => {
res.header('Access-Control-Allow-Origin', 'https://app.com');
res.header('Access-Control-Allow-Methods', 'GET,POST,PUT,DELETE');
res.header('Access-Control-Allow-Headers', 'Content-Type,Authorization');
if (req.method === 'OPTIONS') return res.sendStatus(204);
next();
});Обычно используют готовое middleware (cors для Express).
Детали
- Credentials + origin: при
Allow-Credentials: trueнельзяOrigin: *— нужен конкретный origin. - Разрешать только доверенные origin, а не
*для приватных API.
Коротко для собеседования
Сервер обрабатывает CORS ответными заголовками Access-Control-Allow-Origin/Methods/Headers/Credentials и отвечает на preflight OPTIONS (204). Обычно через middleware (cors). При credentials нельзя использовать * в origin; разрешают только доверенные источники.