Объясни, как работает CORS
Вопрос
Объясни, что такое CORS и как он работает.
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
Same-origin policy: скрипт не может читать ответы другого origin (схема, хост, порт)
CORS: сервер заголовками `Access-Control-Allow-*` разрешает конкретным origin читать ответы
Проверяет браузер, сервер отвечает всегда; вне браузера CORS не действует
Простые запросы уходят сразу, остальные после preflight OPTIONS
С куками нужен `credentials: 'include'`, `Allow-Credentials: true` и точный origin вместо `*`
Что могут спросить следом
- Почему POST с JSON вызывает preflight?
- Защищает ли CORS от CSRF?
- Как бы ты обошёл CORS локально, не трогая бэкенд?
Разбор
Браузер соблюдает same-origin policy: скрипт со страницы https://app.ru не может прочитать ответ от https://api.other.ru, потому что у них разный origin, а origin это схема, хост и порт. CORS это способ для сервера ослабить это правило. Браузер добавляет к запросу заголовок Origin, а сервер в ответе пишет Access-Control-Allow-Origin с этим origin. Если заголовка нет, ответ до скрипта не доходит, хотя сервер его уже отдал. Для непростых запросов, например PUT или POST с JSON, браузер сначала шлёт OPTIONS с методом и заголовками, которые собирается использовать, и сервер отвечает, что разрешает. Если нужны куки, клиент ставит credentials: 'include', а сервер отвечает Allow-Credentials: true и конкретным origin, звёздочка тут запрещена. Важно, что это защита пользователя в браузере, а не сервера: curl CORS не проверяет, поэтому API всё равно закрывают авторизацией.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.