Объясни, будет ли работать 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 не требуют.