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

我有一个简单的带有 axios 到 php 脚本的 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 模块 ?

标签: php cors axios


【解决方案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);
}

【讨论】:

    猜你喜欢
    • 2018-11-29
    • 2019-12-29
    • 2021-05-16
    • 2020-09-15
    • 2020-01-02
    • 2021-06-24
    • 1970-01-01
    • 2021-05-30
    • 2020-02-12
    相关资源
    最近更新 更多