服务器上的Access-Control-Allow-Origin问题

时间:2014-04-22 15:46:07

标签: javascript php jquery ajax cors

我有一个位于Web服务器上的php文件,该文件具有以下代码,允许从其他域访问它:

header('content-type: application/json; charset=utf-8');
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: POST, GET, OPTIONS'); 

当我从我的测试服务器发出请求时,我会在Chrome开发工具上获得响应

> XMLHttpRequest cannot load http://beta.dean.technology/proxy.php. No
> 'Access-Control-Allow-Origin' header is present on the requested
> resource. Origin 'http://localhost' is therefore not allowed access.

我提出的示例请求是JSFiddle

$.ajax({url: 'http://beta.dean.technology/proxy.php',type:"POST",data: '{}',contentType:"application/json",dataType:"json"})

我还使用了在线HTTP标头检查员,他们正在回复" Access-Control-Allow-Origin:* "。我还将此文件放在不同的服务器上,结果仍然相同。通常可以通过URL访问该文件。

有没有人对这个问题有任何想法。

编辑1: PHP源文件 http://beta.dean.technology/proxySource.txt

1 个答案:

答案 0 :(得分:1)

确保在OPTIONS航班前请求中发出标题。您不需要在GET或POST请求中发出它,您可以发出它们但它没有做任何事情。

在发出实际的POST请求之前,您的浏览器将发出一个OPTIONS请求的转航前请求。

if ($_SERVER['REQUEST_METHOD'] === "OPTIONS") {
    // emit CORS headers
    exit;
} else {
    // regular request
}