CORS определяет, когда JavaScript одной origin может читать ответ другой. Ошибка в консоли не всегда означает, что запрос не дошёл до сервера. Не показывайте успех лишь потому, что переключили режим fetch.
Найдите этап отказа
Откройте Network в браузере. Сравните origin страницы: схема, host и порт имеют значение. Проверьте, был ли OPTIONS перед POST, какой статус вернулся и какие заголовки разрешения присутствуют.
Запрос с JSON или нестандартными заголовками может потребовать preflight. Endpoint должен отвечать на него и разрешать нужный метод и заголовки. Настройка server API не исправляется клиентским Access-Control-Allow-Origin в request headers.
Почему no-cors не решение
Непрозрачный ответ скрывает статус и тело от вашего кода. Он не позволяет подтвердить сохранение заявки. Для формы нужен документированный ответ, который браузер сможет прочитать.
Credentials требуют отдельного решения
Публичная форма обычно не должна передавать сессию владельца сайта. Не добавляйте credentials=include по совету агента без понимания контракта. Cookie-сессия, публичный ключ формы и management token имеют разные назначения.
Проверка
На своём тестовом endpoint сравните разрешённую и запрещённую origin. Проверьте HTTP-ошибку и сетевой отказ отдельно. Запишите только безопасный request ID, если он предусмотрен; не копируйте payload посетителя в отчёт агенту.
Источники и дата проверки
Редакционная сверка: 2026-10-27. Учитывайте версию инструментов в своём проекте.
Обновлено