Элементарное решение надоедливой ошибки CORS при попытке отправить JSON методом POST используя fetch: Access to fetch at https://your-site from origin 'http://localhost' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled. Ошибка возникает потому, что браузер обязательно делает запрос методом OPTIONS прежде чем послать POST. Наш php скрипт обрабатывает его как GET и выдает всякую муть или ошибку. А вместо этого, нужно всего-навсего послать требуемые заголовки и убить скрипт: PHP: if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') { header("Access-Control-Allow-Origin: *"); header('Access-Control-Allow-Headers: Content-Type"); exit(); } Всё. На первый раз OPTIONS получают корректный ответ, на второй - получим наш JSON. Не забываем mode: cors в fetch конечно же.
Стоит добавить: https://developer.mozilla.org/ru/docs/Web/HTTP/CORS https://evilinside.ru/nastrojka-cors-v-nginx