【发布时间】:2020-03-31 06:05:31
【问题描述】:
我需要一个脚本来通过 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 (http://php.net/manual/fr/reserved.variables.server.php) 中没有提到 $_SERVER['HTTP_ORIGIN'],我的测试显示此条目并不总是设置。
所以我的问题是:
- $_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"); }
}
【问题讨论】:
-
我们不是来审查您的代码的。我们在这里帮助修复某人的编程错误。
-
我不需要代码审查。我根本无法在其他 SO 问题/答案中引用的 $_SERVER 条目的 php 手册中找到帮助。当遇到文档无法提供帮助的问题时,我认为这里是寻求他人帮助的地方。对不起,如果我弄错了……
-
已编辑以更清楚地表明问题是关于(据我所知)无证 php 超全局的信息请求,并且没有代码审查请求。
标签: javascript php ajax cross-domain