图标字体跨域访问的Web服务器设置
工作原因,我需要使用 editor.md 这个Markdown编辑器。但是在整合到自己开发的系统的过程中,使用Chrome没什么大问题,但是在Firefox,Opera和IE的时候,发现除了 H1-H6
外所有的图标都是不能显示的。
原因
我把所有的静态内容是放到一台单独的静态文件服务器上的,单独的静态文件服务器有独立的域名。 editor.md 我也是这样放置的。考虑到图标一般显示是用的图标字体,应该问题出在 editormd.css
上。
弯路
我首先考虑的是路径问题,但是很快就排除了。
难道是图标字体不能跨域引用?也很快被我排除了,我的Bootstrap3就是用的百度的 CDN 引入的,使用Bootstrap内置的字体图标也没有问题啊。
真正的原因
设置 Web 服务器的 Access-Control-Allow-Origin
就可以解决问题。
何为跨域访问,为什么会有跨域限制?一切还得从浏览器的同源策略说起。
同源策略:是浏览器最核心也是最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能会受到影响,可以说Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现。
浏览器的同源策略:限制了来自不同源的“document”或脚本,对当前“document”读取或设置某些属性。同源策略的存在,限制了“源”自A的脚本只能操作“同源”页面的DOM,“跨源”操作来源于B的页面将会被拒绝。
何为同源呢?“img.company.com”和”agent.company.com”算不算是同源呢?相当长的时间我都认为这两个域都是”company.com”的子域,算是同源的,这想法实际上是错的。
同源:同主机(域名、子域或者IP地址相同)、同端口号、同协议。
解决方案
解决问题的核心是在静态文件服务器上增加 Access-Control-Allow-Origin:*
的响应输出。
在IIS中设置
- 点击
HTTP Response Headers
- 单击右键,选
Add...
- 加入值