<p> 最近项目中需要实现跨域访问资源,本来是挺简单的一个配置,但是没有找到适合的答案。这个寻找答案的过程,对于一名终端的开发者来说,是曲折的。。。</p>
讯享网
关于跨域(CORS),这篇文章有介绍,而且也提供了跨域的解决方案。不过文中使用到的配置,会让所有其他域名的网站都能够访问我们服务器的资源,存在一定的安全隐患。
较为安全的配置,应该是直接指定具体的域名。注意是Header add不是Header set,否则只有最后一行的配置生效
讯享网
但是如果b.com域名下有多个子域名(如img.b.com,pay.b.com...),都需要跨域访问我们服务器的资源,就需要将它们全部都配置一遍,一旦有新增域名,也需要修改配置。所以最好是允许*.b.com可以访问资源。
一开始我以为只要将"http://www.b.com"换成"http://*.b.com"就可以解决问题了,可是发现根本不是这样的。这里使用通配符无法实现想要的效果,而是应该使用正则式!!!"http(s)?://(www.)?(b.com)$"
所以最后的配置:(添加到httpd.conf中)
如果上述配置后报错,则需要加载Header模块:LoadModule headers_module modules/mod_headers.so。
如果提示Header模块不存在,则要添加到服务器:a2enmod headers。
如果提示a2enmod命令找不到,那就安装这个命令吧。。。
===更新===

最近遇到一个问题:虽然不同域名可以访问到资源,但是在同一个浏览器中,b.com访问后,c.com就不能访问了。这个跟浏览器的缓存机制有关,需要在Apache跨域配置中添加下面一行
这里有详细说明

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/187834.html