【问题标题】:Why this simple PHP file doesn't have CORS working? [closed]为什么这个简单的 PHP 文件没有 CORS 工作? [关闭]
【发布时间】:2021-11-21 08:08:20
【问题描述】:

我在 Apache 服务器上有一个非常简单的 PHP 文件,它必须响应 Ajax 请求。我正在尝试允许 CORS,但它不起作用(Firefox 控制台显示:原因:CORS 标头 'Access-Control-Allow-Origin' 缺失)。

我尝试了与 question 不同的解决方案,但它不起作用。我没有使用任何框架,只使用 Apache 服务器上的 index.php 文件。

这段代码是我找到的最简单的,但它不起作用(index.php):

<?php
header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Credentials: true");
header("Access-Control-Max-Age: 1000");
header("Access-Control-Allow-Headers: X-Requested-With, Content-Type, Origin, Cache-Control, Pragma, Authorization, Accept, Accept-Encoding");
header("Access-Control-Allow-Methods: PUT, POST, GET, OPTIONS, DELETE");

echo('CORS activated!!!');
?>

我的 HTML 文件:

$.ajax({
    type: 'GET',
    url: 'http://localhost/index.php',
})
.done(function(data) {
    console.log('Do I have CORS?: ' + data);
})
.fail(function() {
    alert("Error");
});

【问题讨论】:

  • 没有明显的原因为什么这不起作用。您是否启用了正确的 PHP 错误报告?当您在浏览器开发工具、网络面板中检查请求时,您会看到什么?您在那里看到响应标头吗?响应正文是否包含任何错误消息?
  • 这个脚本不能区分飞行前和响应......就像它的预设答案......只需将其更改为:header("Access-Control-Allow-Origin: http://localhost");。案件结案。

标签: javascript php apache cors


【解决方案1】:

可能性 1:根据MDN,如果您还使用Access-Control-Allow-Credentials,则不能将通配符 (*) 用于Access-Control-Allow-Origin

对于没有凭据的请求,文字值“*”可以是 指定为通配符;该值告诉浏览器允许请求 来自任何来源的代码以访问资源。尝试使用 带有凭据的通配符将导致错误。

<?php
header("Access-Control-Allow-Origin: *"); //Either change this to your domain(s)
header("Access-Control-Allow-Credentials: true"); //Or get rid of this
?>

(原因是:这种组合将允许互联网上的任何人通过将您的域加载到 iframe 中然后用 JS 操作它来冒充您的用户,完全不可见。)

可能是这样,但以下内容可能有助于测试:

可能性 2:您的 index.php 正在被缓存,因此在您进行更改后,您的浏览器仍然看到旧版本。开发控制台中的“禁用缓存”功能对于 iframe 和 CSS URL 资源等某些内容可能不可靠。尝试从私人浏览会话中访问 index.php,并检查开发控制台中发送了哪些标头。

【讨论】:

    猜你喜欢
    • 2016-11-28
    • 1970-01-01
    • 1970-01-01
    • 2018-06-23
    • 2016-09-23
    • 1970-01-01
    • 2016-12-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多