StudyCode
CORS (Cross-Origin Resource Sharing) — механизм, которым сервер разрешает браузеру делать запросы с чужого origin (схема + домен + порт). По умолчанию действует Same-Origin Policy: скрипт с evil.com не может прочитать ответ вашего API — это защита пользователя от кражи данных через его же cookie. Проверку выполняет браузер, а не сервер: сервер лишь присылает заголовки Access-Control-Allow-Origin и подобные, а браузер решает, отдать ли ответ скрипту. Поэтому CORS не защищает от curl или Postman — там нет браузера. Для «непростых» запросов (PUT, свои заголовки) браузер сначала шлёт preflight OPTIONS и только после разрешения — сам запрос.
// Фронт на localhost:3000, API на localhost:4000 —
// это РАЗНЫЕ origin, браузер заблокирует ответ без CORS
// Сервер разрешает конкретный origin
app.use((req, res, next) => {
res.setHeader('Access-Control-Allow-Origin', 'https://myapp.com');
res.setHeader('Access-Control-Allow-Methods', 'GET,POST,PATCH,DELETE');
res.setHeader('Access-Control-Allow-Headers', 'Content-Type,Authorization');
if (req.method === 'OPTIONS') return res.status(204).end(); // preflight
next();
});
// Важно: curl этот запрос выполнит без всякого CORS —
// проверяет только браузер, защищая пользователя, а не сервер