Задать вопрос

По какой причине не работает POST запрос, если передавать в нем параметры?

У меня есть вот такой самописанный мини-роутер, который в теории должен принимать запросы
class Router
{
    private $routes = array();

    private function setRoute(string $method, string $path, $callback): void {
        $this->routes[$method . $path] = [
            "method" => $method,
            "callback" => $callback
        ];
    }

    public function get(string $path, $callback): void {
        $this->setRoute("GET", $path, $callback);
    }

    public function post(string $path, $callback): void {
        $this->setRoute("POST", $path, $callback);
    }

    public function delete(string $path, $callback): void {
        $this->setRoute("DELETE", $path, $callback);
    }

    public function run() {
        $method = $_SERVER["REQUEST_METHOD"];
        $path = $_SERVER["REQUEST_URI"];

        call_user_func($this->routes[$method . $path]['callback']);
    }
}


Основной файл имеет следующий код:
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods", "GET,HEAD,OPTIONS,POST,PUT');
header("Content-Type: application/json");

require 'Router.php';

$router = new Router();

$router->post('/user', function () {
    echo 'post';
});

$router->run();


Я пытаюсь отправить запрос через axios вот таким образом:
axios.post('http://localhost:8000/user').then((r) => console.log(r))

И все проходит удачно, но как только я пытаюсь передать параметры (Пусть даже пустой объект)
axios.post('http://localhost:8000/user', { } ).then((r) => console.log(r))

Я получаю следующее:

Access to XMLHttpRequest at 'localhost:8000/user' from origin 'localhost:3000' has been blocked by CORS policy: Request header field content-type is not allowed by Access-Control-Allow-Headers in preflight response.


При этом, cors на сервере вроде как настроены
  • Вопрос задан
  • 104 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 1
Enokin
@Enokin
Full-stack разработчик
Попробуйте добавить еще строку
header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Headers: *");
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы