服务器上的访问控制允许原点出现问题


Issue with Access-Control-Allow-Origin on server

我有一个位于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标头检查器,他们的回复是"访问控制允许来源:*"。我也把这个文件放在不同的服务器上,结果仍然一样。可以通过正常访问url来访问该文件。

有人对这个问题有什么想法吗。

第1版:PHP源文件http://beta.dean.technology/proxySource.txt

确保在OPTIONS飞行前请求上发出标题。您不需要在GET或POST请求时发出它,您可以发出它们,但它什么也不做。

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

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