У меня есть простой почтовый запрос со скриптом 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);
})
Что может решить это?
заранее спасибо
как это должно выглядеть в php.ini?
Я ошибся -- мне пришлось разрешить это на стороне сервера --- Если вы используете Apache .. Вы можете использовать файл .htaccess или конфигурацию vHost, чтобы разрешить .. Добавление Header set Access-Control-Allow-Origin "*" в файл .. Тогда вам нужно убедитесь, что заголовки включены a2enmod headers, затем перезапустите ..
@Zak — PHP-программы делать выполняются на стороне сервера. Не должно быть необходимости привлекать редактирование конфигурации apache или php.
Мои настройки должны быть другими. Я должен был сделать следующее: enable-cors.org/server_apache.html -- Не нужно ли пройти через сеть сервер, чтобы добраться до php модуль?
@Zak — веб-сервер свободно и автоматически передает его на PHP. enable-cors.org/server_php.html
@Felix — PHP-скрипт вообще работает, когда делается запрос OPTIONS? (например, есть ли какой-то PHP, который вы нам не показываете, который делает что-то умное с маршрутизацией, что только запросы POST попадают в ваши операторы header()?)
Скрипт @Quentin вообще не работает. Он запускается, когда вызывается через почтовый запрос axios из внешнего интерфейса. Нет маршрутизации в php. это простой глупый php-скрипт, который только собирает «$_POST», выполняет некоторые простые действия с pfd и сохраняет его.
@Zak уже добавил эти вещи в .htaccess
любые дополнительные намеки?






Рабочее решение для меня:
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);
}
Возможно, вам придется установить
Access-Control-Allow-Headersв файлеphp.iniи перезапустить веб-сервер, чтобы это сработало. В прошлом у меня были проблемы с попыткой разрешить тегheader. Просто потому, что вы должны разрешить его на достаточно высоком уровне. уровень, на котором все ваши включения/требования также «разрешены»