Каждый джуниор-фронтендер хотя бы один раз в первый месяц встречает в консоли что-то вроде:

Access to fetch at 'https://api.example.com/posts' from origin 'http://localhost:3000'
has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present
on the requested resource.

И на это многие реагируют первой мыслью «что я сделал не так?». В большинстве случаев — ничего. CORS — не ошибка в вашем коде, а защита, встроенная в браузер. Знать про неё нужно не для того, чтобы «починить», а чтобы понимать, что должно произойти на стороне сервера.

Три главы модуля:

  • 8.1 — same-origin policy: правило, из-за которого вообще существует CORS;
  • 8.2 — preflight: загадочный OPTIONS-запрос, который шлёт сам браузер;
  • 8.3 — как читать типичные CORS-ошибки и что делать в каждом случае.

После этого модуля никакая CORS-ошибка не будет вводить в ступор — вы будете точно знать, что попросить у бэкенда или как обойти проблему в dev-окружении.