javascript – htaccess中的Access-Control-Allow-Origin

我有3个网站,A,B和C.

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

为了在B和C站点上允许CORS,基于this answer on StackOverflow和其他几个站点,我将以下.htaccess放在A站点目录中:

<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唯一能做的就是将该文件的内容返回到客户端的页面,有什么值得担心的吗?不确定是否可以利用任何恶意软件.

最佳答案 试试这个……

 <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>
点赞