axios post的php cors问题

Posted

技术标签:

【中文标题】axios post的php cors问题【英文标题】:php cors issue with axios post 【发布时间】:2019-08-18 07:29:18 【问题描述】:

我有一个简单的带有 axiosphp 脚本的 post 请求,它呈现一些 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.log(response);
        )

什么可以解决这个问题?

提前致谢

【问题讨论】:

您可能必须在 php.ini 文件中设置 Access-Control-Allow-Headers 并重新启动 Web 服务器才能使其正常工作。过去我在尝试使用 header 时遇到过问题标记..仅仅因为您必须在足够高的级别上允许它,以使您的所有包含/要求也被“允许” 在 php.ini 中应该是什么样子? 我弄错了——我必须在服务器端允许它——如果您使用的是 Apache ..您可以使用 .htaccess 文件或 vHost 配置来允许 .. 添加 @987654329 @ 到文件.. 然后你必须确保启用了标题a2enmod headers 然后重新启动.. @Zak — PHP 程序 do 运行服务器端。应该不需要涉及 apache 或 php 配置编辑。 我的设置一定是不同的.. 我必须做以下事情:enable-cors.org/server_apache.html -- 是否不必通过网络 服务器 来访问 php 模块 ? 【参考方案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);

【讨论】:

以上是关于axios post的php cors问题的主要内容,如果未能解决你的问题,请参考以下文章

axios POST 请求到后端时出现 CORS 错误

Axios POST使用CORS请求执行错误块,浏览器开发工具显示200

Cors Post 请求上的 Axios 网络错误,状态码为 200

在 Django 中使用 Axios 和 CORS 获取 POST 请求的错误请求并做出反应

使用 laravel-cors 和 axios 进行 POST 的 Laravel “CSRF 令牌不匹配”

从 Vue 应用程序到在 WAMP 上运行的 PHP API 的 axios 的 CORS 问题 [重复]