在 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】:

对于所有请求,您必须使用 localhost127.0.0.1。通常,在您的代码中,您应该通过将 URI 附加到当前主机来调用服务器,而无需在 URI 字符串中重新添加主机和端口。

答案基于:CORS request did not succeed

【讨论】:

我从本地主机发送请求。另一方面,服务器在线,我只是将它用于数据库。

以上是关于在 php 文件上启用了 Cors,但仍然出现错误的主要内容,如果未能解决你的问题,请参考以下文章

为啥启用 CORS 后仍然出现 CORS 错误

CORS 已启用,但仍出现 CORS 错误

CORS 已启用,但 toDataURL 仍会引发警告

在 Java Servlet 上启用了 CORS,但从前端接收到 CORS 错误

在启动中启用 CORS 失败并出现预检错误

使用 .NET Core 和 Angular 客户端启用 CORS 错误后,它仍然会发生