@MikUrrey

Access-Control-Allow-Origin, почему браузер его не понимает?

Код скрипта:
<?php
error_reporting(E_ERROR | E_WARNING | E_PARSE);
header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Methods: *");
header("Access-Control-Allow-Headers: *");
header("Access-Control-Expose-Headers: *");
header("Content-type: application/json");

if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
    exit;
}

Запрос:
POST http://127.0.0.1/?/auth/login
{password: "123456", phone: "79999999999"}

Результат:
Access to XMLHttpRequest at 'http://127.0.0.1/?/auth/login' from origin 'http://localhost:8080' 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.


Если прогнать в API Tester, заголовки приходят:
access-control-allow-headers: *
access-control-allow-methods: *
access-control-allow-origin: *
access-control-expose-headers: *
connection: keep-alive
content-type: application/json
date: Wed, 09 Jun 2021 15:29:11 GMT
server: nginx/1.19.10
transfer-encoding: chunked


Что за чертовщина?

UPD: Обнаружил, что nginx не может обработать запросы OPTIONS (405). Как правильно разрешить их? Пока ни один трюк из тех, что нагуглил, не сработал. Мне необходимо направить такой запрос на тот же путь, который отработал бы для обычного GET или POST.
  • Вопрос задан
  • 102 просмотра
Решения вопроса 1
@MikUrrey Автор вопроса
Проблему решило добавление правила в default.conf в location
if ($request_method = 'OPTIONS') {
            add_header 'Access-Control-Allow-Origin' '*';
            add_header 'Access-Control-Allow-Headers' '*';
            add_header 'Access-Control-Allow-Methods' '*';
            add_header 'Access-Control-Expose-Headers' '*';
            add_header 'Access-Control-Max-Age' 1728000;
            add_header 'Content-Type' 'text/plain; charset=utf-8';
            add_header 'Content-Length' 0;
            return 204;
        }

Хотелось бы контролировать отправляемые заголовки скриптом, но так тоже пока сойдёт.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы