我有一个位于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
答案 0 :(得分:1)
确保在OPTIONS航班前请求中发出标题。您不需要在GET或POST请求中发出它,您可以发出它们但它没有做任何事情。
在发出实际的POST请求之前,您的浏览器将发出一个OPTIONS请求的转航前请求。
if ($_SERVER['REQUEST_METHOD'] === "OPTIONS") {
// emit CORS headers
exit;
} else {
// regular request
}