在 php 文件上启用了 Cors,但仍然出现错误
Posted
技术标签:
【中文标题】在 php 文件上启用了 Cors,但仍然出现错误【英文标题】:Cors enabled on php file, but still getting error 【发布时间】:2020-01-01 17:20:59 【问题描述】:我正在构建一个 API,用于培训目的。我现在必须发送一个包含信息的 POST 请求。我正在使用 React JS 和 php,问题是每次我发送请求时,CORS 错误仍然会出现在浏览器上。
我发送 POST 的 JS 文件是,我更改了 URL,因为它在我的个人服务器上:
axios.post('https://myurl/api/book/create.php',
data: JSON.stringify(values, 0, 2)
)
.then(function (response)
console.log(response);
)
.catch(function (error)
console.log(error);
);
在服务器端,我有以下内容
<?php
header("Access-Control-Allow-Origin: *");
header("Content-Type: application/json; charset=UTF-8");
header("Access-Control-Allow-Methods: POST");
header("Access-Control-Max-Age: 3600");
header("Access-Control-Allow-Headers: Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With");
使用邮递员,请求顺利进行,但每次都通过浏览器发送
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://myurl/api/book/create.php. (Reason: CORS request did not succeed
【问题讨论】:
【参考方案1】:请确保您在后端服务器中允许 CORS。然后,您需要为 axios 发送标头,如下例所示
axios.defaults.headers.post['Content-Type'] = 'application/json';
axios.defaults.withCredentials = true;
axios.defaults.crossDomain = true;
(或者设置在数据后面的第三个参数中)
【讨论】:
"跨域请求被阻止:同源策略不允许读取位于 'myurl/book/livro/create.php' 的远程资源。(原因:如果 CORS 标头为 'Access-Control-Allow-Origin,则不支持凭据' 是 '*')" 在我的服务器上启用。 @ZephSenpai 请允许Access-Control-Allow-Credentials
@ZephSenpai 您不能使用*
,当凭据与请求一起发送时,您必须使用Origin
请求标头的确切内容进行响应。
@misorude 你能解释一下吗?
@ZephSenpai 当您发出包含凭据的请求时,远程服务器需要以 Access-Control-Allow-Origin: http://localhost/
(或任何您的实际来源)进行响应。【参考方案2】:
对于所有请求,您必须使用 localhost
或 127.0.0.1
。通常,在您的代码中,您应该通过将 URI 附加到当前主机来调用服务器,而无需在 URI 字符串中重新添加主机和端口。
答案基于:CORS request did not succeed
【讨论】:
我从本地主机发送请求。另一方面,服务器在线,我只是将它用于数据库。以上是关于在 php 文件上启用了 Cors,但仍然出现错误的主要内容,如果未能解决你的问题,请参考以下文章