跨域XMLHttpRequest,Access-Control-Allow-Origin标头和$ _SERVER ['HTTP_ORIGIN']

问题描述 投票:2回答:1

我需要一个脚本来通过XMLHttpRequest将信息传递到不同域中托管的请求页面。关于这个问题有很多问题和答案,但是我发现的问题和答案都没有一个能完全回答我的问题。

在网上搜索使我发现,我必须通过诸如header("Access-Control-Allow-Origin: *");header("Access-Control-Allow-Origin: http://example.com");

由于我需要多个外部域,但我仍然发现*过于开放,进一步的研究使我想到了依赖服务器端比较$_SERVER['HTTP_ORIGIN']与授权值的解决方案。 (在StackOverflow上:例如Access-Control-Allow-Origin Multiple Origin Domains?

但是我发现在php manuel($_SERVER['HTTP_ORIGIN'])中没有提到http://php.net/manual/fr/reserved.variables.server.php,而我的测试表明并不一定总是设置此条目。

所以我的问题是:-$_SERVER['HTTP_ORIGIN']超全局集何时成立?-在全球范围内可靠吗?...还是取决于客户端浏览器?

似乎(但仅凭经验,从我的测试/ Firefox 34.0.5&ios Safari来看),仅在“需要”(即请求实际上来自另一个域)时才设置。

请参阅下面的简短代码摘录,以帮助了解需要-如果未定义$_SERVER['HTTP_ORIGIN'],则不发送头(假设它实际上不是跨域调用,应该没有任何问题),-发送“允许”标头(如果已定义并且属于接受域的数组)。

if(isset($_SERVER['HTTP_ORIGIN'])) {// in case of cross domain ajax call
    $http_origin = $_SERVER['HTTP_ORIGIN']; 
    if(in_array($http_origin, $ajaxAllowedDomains))
       { header("Access-Control-Allow-Origin: $http_origin"); }
}
javascript php ajax cross-domain
1个回答
1
投票

何时$_SERVER['HTTP_ORIGIN']超全局集?

当HTTP请求包含Origin标头时。当使用XMLHttpRequest进行跨域请求时,浏览器将设置一个。

在全球范围内可靠吗?

在您可能要设置CORS响应标头的情况下。

© www.soinside.com 2019 - 2024. All rights reserved.