PHP Access-Control-Allow-Origin标头无法正常工作

时间:2015-03-02 13:42:13

标签: javascript php ajax cors

我正在处理一个JavaScript脚本,该脚本向另一个服务器(我自己的域)发出AJAX请求。 JavaScript脚本使用插件添加到页面中。它应该从我的域上的PHP文件中检索数据。

我已将以下标头添加到PHP文件中:

<?php
header("Access-Control-Allow-Origin: *");

但是AJAX请求仍然会抛出错误。将*更改为我计划在其上使用的实际域名也不起作用。我已经搜索了堆栈溢出的答案,并发现了以下内容:

// Allow from any origin
if (isset($_SERVER['HTTP_ORIGIN'])) {
    header("Access-Control-Allow-Origin: {$_SERVER['HTTP_ORIGIN']}");
    header('Access-Control-Allow-Credentials: true');
    header('Access-Control-Max-Age: 86400');    // cache for 1 day
}

// Access-Control headers are received during OPTIONS requests
if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {

    if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD']))
        header("Access-Control-Allow-Methods: GET, POST, OPTIONS");         

    if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']))
        header("Access-Control-Allow-Headers:        {$_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']}");

    exit(0);
}

也不起作用。

我认为我的.htaccess文件可能会以某种方式影响事物,所以我暂时删除了它,但是AJAX请求仍然说在PHP文件中没有设置Access-Control-Allow-Origin标头。

我在daniweb.com上发现了这个: https://www.daniweb.com/web-development/php/threads/461902/php-header-is-not-working-for-access-control-allow-origin 这是没有解决的。

如果标题已经设置(以多种方式),那么为什么AJAX请求仍会抛出错误,说明标题尚未设置?

1 个答案:

答案 0 :(得分:1)

通过AJAX请求发送的数据破坏了PHP脚本 - 导致它无法正确执行,我猜这会阻止正确设置标头。

请注意以后对此的所有观点:我认为这是您可能无法正常工作的原因 - 而且很可能为什么我在撰写本文之前所看到的主题从未得到回答。这无疑是令人尴尬的。我想在此之前没有人会认为他们做了些蠢事。

确保您在请求中发送的数据不会以某种方式导致PHP脚本无法执行。