Apache跨域资源访问报错问题解决方案
很多时候,大中型网站为了静态资源分布式部署,加快访问速度,减轻主站压力,会把静态资源(例如字体文件、图片等)放在独立服务器或者CDN上,并且使用独立的资源域名(例如res.test.com)
创新互联专注为客户提供全方位的互联网综合服务,包含不限于成都网站建设、成都网站设计、永平网络推广、微信小程序、永平网络营销、永平企业策划、永平品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们大的嘉奖;创新互联为所有大学生创业者提供永平建站搭建服务,24小时服务热线:13518219792,官方网址:www.cdcxhl.com但是在实际部署中,会发现浏览器无法载入这些不同域名的资源,firefox控制台会报错:成都服务器托管
已阻止跨源请求:同源策略禁止读取位于 http://xxxxx 的远程资源。(原因:CORS 头缺少 'Access-Control-Allow-Origin')。
已阻止跨源请求:同源策略禁止读取位于 http://xxxxx 的远程资源。(原因:CORS 请求失败)。
这是因为现代浏览器将其定义为跨域资源而不允许加载
理解跨域首先必须要了解同源策略。同源策略是浏览器上为安全性考虑实施的非常重要的安全策略。
何谓同源:
URL由协议、域名、端口和路径组成,如果两个URL的协议、域名和端口相同,则表示他们同源。
同源策略:
浏览器的同源策略,限制了来自不同源的"document"或脚本,对当前"document"读取或设置某些属性。 (白帽子讲web安全[1])
从一个域上加载的脚本不允许访问另外一个域的文档属性。
那么关键是如何解决呢,其实很简单,只要在静态资源服务器上,增加一个头信息:成都服务器托管
Access-Control-Allow-Origin *
本文就apache进行操作,nginx大同小异
首先编辑httpd.conf
找到这行
#LoadModule headers_module modules/mod_headers.so
把#注释符去掉
LoadModule headers_module modules/mod_headers.so
目的是开启apache头信息自定义模块
然后在独立资源域名的虚拟主机添加一行
Header set Access-Control-Allow-Origin *
意思是对这个域名的资源进行访问时,添加一个头信息
重启apache
再访问,OK!成都小程序开发公司
1 2 3 4 5 6 7 8 9 | NameVirtualHost 10.0.0.2:80
DocumentRoot /var/www/host .example.com ServerName host.example.com JkMount /webapp/ * jkworker Header set Access-Control-Allow-Origin "*" RewriteEngine on RewriteRule ^ /otherhost http: //otherhost .example.com /webapp [R,L] < /VirtualHost > |
And here's an example of the Apache config for the second:
1 2 3 4 5 6 7 | NameVirtualHost 10.0.1.2:80
DocumentRoot /var/www/otherhost .example.com ServerName otherhost.example.com JkMount /webapp/ * jkworker Header set Access-Control-Allow-Origin "*" < /VirtualHost > |
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:https://www.cnblogs.com/wangluochong/p/6001651.html
文章标题:Apache跨域资源访问报错问题解决方案
URL地址:http://cdiso.cn/article/dipdg.html