axios post的php cors问题
Posted
技术标签:
【中文标题】axios post的php cors问题【英文标题】:php cors issue with axios post 【发布时间】: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 模块 ?
【参考方案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请求执行错误块,浏览器开发工具显示200
Cors Post 请求上的 Axios 网络错误,状态码为 200
在 Django 中使用 Axios 和 CORS 获取 POST 请求的错误请求并做出反应