PHP访问控制允许来源头不工作

问题描述:

我工作的一个JavaScript脚本,使得AJAX请求到另一台服务器(我自己的域名)。 JavaScript脚本使用插件添加到页面中。它应该从我的域上的PHP文件中检索数据。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文件设置。

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

如果标头肯定被设置(以多种方式),怎么来的AJAX请求仍然抛出一个错误,说明头尚未设置?

+1

我很困惑。您是否向第三方服务器或您控制的服务器提出请求?你说这是第三方,但后来你说你正在编辑一个PHP文件。 – Quentin 2015-03-02 13:44:53

+0

第三方,我只是指一个单独的域名。我不拥有我制作插件的域名。编辑:编辑原始帖子。抱歉。 – 2015-03-02 13:46:50

+0

使用浏览器开发人员工具的Net标签。在那里查看Ajax请求和响应。它是否会转到您期望的网址?你能看到响应中的访问控制标题吗? – Quentin 2015-03-02 13:47:50

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

请注意将来所有这些观点:我认为这也是你的工作可能无法正常进行的原因 - 而且很可能为什么我在撰写本文之前查看的主题从未得到回答。无可否认,这很令人尴尬。我想没有人想过在现在之前承认他们做了一些愚蠢的事情。

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