Проблема php cors с сообщением axios

У меня есть простой почтовый запрос со скриптом axios to php, который отображает некоторые PDF-файлы и должен возвращать строку.

Теперь я получил эту ошибку:

Access to XMLHttpRequest at 'IP:7580/pdfgen/pdfGen.php' from origin 'http://localhost:8080' has been blocked by CORS policy: Request header field content-type is not allowed by Access-Control-Allow-Headers in preflight response.

Я установил это в своем файле php:

<?php
error_reporting(E_ALL);

header('Access-Control-Allow-Origin: *');

Без изменений. также пробовал это:

header('Access-Control-Allow-Origin: *');
header("Access-Control-Allow-Methods: GET, POST, OPTIONS, PUT, DELETE");
header("Access-Control-Allow-Headers: Content-Type, Access-Control-Allow-Headers, X-Requested-With");

тоже без изменений.

мой вызов axios выглядит так:

axios.post("http://IP:7580/pdfgen/pdfGen.php", this.state)
        .then(response => {
            report = {...this.state.report};
            report.createdAt = reportCreatedAt;

            window.open(response.data);


            this.setState({report: report, pdf: response.data});
            console.info(response);
        })

Что может решить это?

заранее спасибо

Возможно, вам придется установить Access-Control-Allow-Headers в файле php.ini и перезапустить веб-сервер, чтобы это сработало. В прошлом у меня были проблемы с попыткой разрешить тег header. Просто потому, что вы должны разрешить его на достаточно высоком уровне. уровень, на котором все ваши включения/требования также «разрешены»

Zak 27.03.2019 17:33

как это должно выглядеть в php.ini?

Felix 27.03.2019 17:40

Я ошибся -- мне пришлось разрешить это на стороне сервера --- Если вы используете Apache .. Вы можете использовать файл .htaccess или конфигурацию vHost, чтобы разрешить .. Добавление Header set Access-Control-Allow-Origin "*" в файл .. Тогда вам нужно убедитесь, что заголовки включены a2enmod headers, затем перезапустите ..

Zak 27.03.2019 17:50

@Zak — PHP-программы делать выполняются на стороне сервера. Не должно быть необходимости привлекать редактирование конфигурации apache или php.

Quentin 27.03.2019 17:58

Мои настройки должны быть другими. Я должен был сделать следующее: enable-cors.org/server_apache.html -- Не нужно ли пройти через сеть сервер, чтобы добраться до php модуль?

Zak 27.03.2019 18:00

@Zak — веб-сервер свободно и автоматически передает его на PHP. enable-cors.org/server_php.html

Quentin 27.03.2019 18:05

@Felix — PHP-скрипт вообще работает, когда делается запрос OPTIONS? (например, есть ли какой-то PHP, который вы нам не показываете, который делает что-то умное с маршрутизацией, что только запросы POST попадают в ваши операторы header()?)

Quentin 27.03.2019 18:06

Скрипт @Quentin вообще не работает. Он запускается, когда вызывается через почтовый запрос axios из внешнего интерфейса. Нет маршрутизации в php. это простой глупый php-скрипт, который только собирает «$_POST», выполняет некоторые простые действия с pfd и сохраняет его.

Felix 27.03.2019 20:08

@Zak уже добавил эти вещи в .htaccess

Felix 27.03.2019 20:33

любые дополнительные намеки?

Felix 28.03.2019 07:59
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
10
2 824
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Рабочее решение для меня:

if (isset($_SERVER['HTTP_ORIGIN'])) {
    // Decide if the origin in $_SERVER['HTTP_ORIGIN'] is one
    // you want to allow, and if so:
    header('Access-Control-Allow-Origin: *');
    header('Access-Control-Allow-Credentials: true');
    header('Access-Control-Max-Age: 1000');
}
if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
    if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD'])) {
        // may also be using PUT, PATCH, HEAD etc
        header("Access-Control-Allow-Methods: POST, GET, OPTIONS, PUT, DELETE");
    }

    if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS'])) {
        header("Access-Control-Allow-Headers: Accept, Content-Type, Content-Length, Accept-Encoding, X-CSRF-Token, Authorization");
    }
    exit(0);
}

Другие вопросы по теме