我有3个网站,A,B和C.
网站A有一个" test.js"我在网站B和C上调用的javascript文件.test.js文件使用XMLHttpRequest来获取单独的" stuff.html"站点A上的文件返回到主叫网站上的div。
为了在B和C站点上允许基于this answer on StackOverflow和其他几个站点的CORS,我将以下.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唯一能做的就是将该文件的内容返回给客户的页面,有什么值得担心的吗? ?不确定是否可以利用任何恶意内容。
答案 0 :(得分: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>
答案 1 :(得分:1)
如果有这个问题,这对我有用:
<?php
header("Access-Control-Allow-Origin: *");
?>
所以你必须将.html改为.php