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

费雷拉特

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

在网上搜索使我发现我必须通过诸如
header("Access-Control-Allow-Origin: *");或的标题允许这些域
header("Access-Control-Allow-Origin: http://example.com");

由于我需要多个外部域,但是我仍然发现*它过于开放,因此进一步的研究使我想到了依赖于服务器端$_SERVER['HTTP_ORIGIN']与授权值进行比较的解决方案(在StackOverflow上:例如,访问控制允许起源多个起源域?

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

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

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

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

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"); }
}
昆汀

什么是$_SERVER['HTTP_ORIGIN']超全局集合?

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

在全球范围内可靠吗?

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

XMLHttpRequest无法加载XXX No'Access-Control-Allow-Origin'标头

Access-Control-Allow-Origin标头如何工作?

“ Access-Control-Allow-Origin”标头包含多个值

XMLHttpRequest请求的资源上不存在“ Access-Control-Allow-Origin”标头

没有exportLink的“ Access-Control-Allow-Origin”标头

由于响应中不存在“ Access-Control-Allow-Origin”标头,因此跨域请求停止工作

没有'Access-Control-Allow-Origin'标头-Laravel

(Laravel和Nginx)CORS标头'Access-Control-Allow-Origin'与'(null)'不匹配

ReactJS:XMLHttpRequest没有'Access-Control-Allow-Origin'标头

多个Access-Control-Allow-Origin标头

存在“ Access-Control-Allow-Origin”标头

获取Access-Control-Allow-Origin标头错误

ASP核心和angular7中没有'Access-Control-Allow-Origin'标头

Spring Boot-跨域请求被阻止(原因:缺少CORS标头“ Access-Control-Allow-Origin”)

尽管Access-Control-Allow-Origin标头存在跨域XHR失败

JSONP跨源错误“不存在Access-Control-Allow-Origin标头”

Access-Control-Allow-Origin标头不起作用

即使REST Server设置标头,也会出现Access-Control-Allow-Origin错误

Foursquare返回“ No access control allow origin”标头存在错误

在IIS中修改Access-Control-Allow-Origin标头

“ Access-Control-Allow-Origin”标头包含多个值

跨域请求被阻止:&原因:缺少CORS标头'Access-Control-Allow-Origin'

$ .post没有'Access-Control-Allow-Origin'标头

在Aurelia中添加“ Access-Control-Allow-Origin”标头

Azure 没有“Access-Control-Allow-Origin”标头

withCredentials 和通配符 * - 'Access-Control-Allow-Origin' 标头问题

CORS – 跨域请求被阻止 – 'Access-Control-Allow-Origin' 标头包含无效值

Meteor 和 Socket IO - 不存在“Access-Control-Allow-Origin”标头

Beego - 修复无“Access-Control-Allow-Origin”标头