Ответ вслух Junior CORS спрашивают часто обновлено

Объясни, как работает CORS

Вопрос

Объясни, что такое CORS и как он работает.

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

Браузер соблюдает same-origin policy: скрипт со страницы https://app.ru не может прочитать ответ от https://api.other.ru, потому что у них разный origin, а origin это схема, хост и порт. CORS это способ для сервера ослабить это правило.

Что должно прозвучать в ответе

  • 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 ошибок.

Термины по теме