PassFront
  1. PassFront
  2. База знаний
  3. DOM и браузер

Объясни, будет ли работать CORS при отправке формы: от чего это зависит и почему.

DOM и браузер

CORS при отправке формы зависит от способа отправки: обычная HTML-форма (submit) CORS не ограничивает, а отправка через `fetch`/XHR — да.

Обычная HTML-форма (native submit)

<form action="https://other.com/submit" method="POST">
  <input name="data">
  <button>Отправить</button>
</form>

Нативная отправка формы (переход/навигация) не подпадает под CORS — браузер разрешает отправку на другой origin. Это исторически «простой» запрос; ответ при этом просто отображается как навигация, а JS его не читает, поэтому SOP не нарушается.

Но: именно поэтому нативные формы уязвимы к CSRF (запрос уходит с cookie).

Отправка через fetch/XHR

fetch('https://other.com/submit', { method: 'POST', body: data });

Здесь CORS действует: браузер проверяет заголовки, а для «сложных» запросов (JSON, кастомные заголовки) шлёт preflight OPTIONS. Без разрешающих заголовков сервера — ошибка CORS.

От чего зависит

  • Нативный submit формы → CORS не блокирует (но есть риск CSRF).
  • fetch/XHR → CORS применяется; сложный запрос → preflight.
  • Тип контента формы: application/x-www-form-urlencoded, multipart/form-data, text/plain считаются «простыми» (без preflight), application/json — сложным.

Коротко для собеседования

Зависит от способа: нативная отправка HTML-формы (submit) CORS не ограничивает (но уязвима к CSRF, т.к. шлёт cookie). Отправка через fetch/XHR подпадает под CORS; для JSON/кастомных заголовков — preflight OPTIONS. «Простые» типы контента формы preflight не требуют.

Другие вопросы раздела