2016-06-10 154 views
4

我有3个网站,A,B和C.访问控制允许来源htaccess

网站A有一个“test.js”javascript文件,我打电话在网站B和C. test.js文件使用XMLHttpRequest获取站点A上单独的“stuff.html”文件的内容,以返回到调用网站上的div。

为了允许在刚B和C点CORS基础上this answer on StackOverflow和其他几个人,我把下面的.htaccess在网站目录:

<IfModule mod_headers.c> 
    SetEnvIf Origin "http(s)?://(www\.)?(b.com|c.com)$" AccessControlAllowOrigin=$0 
    Header add Access-Control-Allow-Origin %{AccessControlAllowOrigin}e env=AccessControlAllowOrigin 
    Header append Vary Origin 
</IfModule> 

当我尝试加载网站B,它似乎工作。但是,当我尝试加载据点C在同一个浏览器,我得到以下错误:

XMLHttpRequest cannot load http://www.a.com/stuff.html. The 'Access-Control-Allow-Origin' header has a value 'http://www.b.com' that is not equal to the supplied origin. Origin 'http://www.c.com' is therefore not allowed access. 

这就是说,如果我清除缓存,然后装载场C,它的工作原理。但是,然后加载站点B不起作用,并给出相同的错误(反过来)。

有没有办法让这个,让它允许两个网站正确加载它?不知道我可能会错过这里。

编辑:

位的测试之后,我也发现,使用通配符解决此问题:

<IfModule mod_headers.c> 
    Header set Access-Control-Allow-Origin * 
</IfModule> 

...虽然我不知道有关的安全性因为它对所有人开放。假设stuff.html只是一个带锚链接的静态html文件,test.js做的唯一事情就是将该文件的内容返回给客户端页面,有什么需要担心的吗?不知道这是否会被恶意使用。

回答

1

试试这个..

<IfModule mod_headers.c> 
     SetEnvIf Origin "http(s)?://(www\.)?(b.com|c.com)$" AccessControlAllowOrigin=$0$1 
    Header add Access-Control-Allow-Origin %{AccessControlAllowOrigin}e env=AccessControlAllowOrigin 
Header append Vary Origin 
    </IfModule> 
+0

请确认是否工作! –

+0

谢谢你的回复,但不幸的是它没有工作,我仍然有像以前一样的错误。 –

1

有了这个问题,这个工作对我来说:

<?php 
header("Access-Control-Allow-Origin: *"); 
?> 

所以你必须改变的.html到.PHP

+2

不是一个好主意,允许所有使用'*' –

+0

@VinodKumar啊,did'nt知道你可以这样限制域名 –