图标字体跨域访问的Web服务器设置

工作原因,我需要使用 editor.md 这个Markdown编辑器。但是在整合到自己开发的系统的过程中,使用Chrome没什么大问题,但是在Firefox,Opera和IE的时候,发现除了 H1-H6 外所有的图标都是不能显示的。

图标字体跨域访问的Web服务器设置

原因

我把所有的静态内容是放到一台单独的静态文件服务器上的,单独的静态文件服务器有独立的域名。 editor.md 我也是这样放置的。考虑到图标一般显示是用的图标字体,应该问题出在 editormd.css 上。

弯路

  1. 我首先考虑的是路径问题,但是很快就排除了。

  2. 难道是图标字体不能跨域引用?也很快被我排除了,我的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中设置

  1. 点击 HTTP Response Headers

图标字体跨域访问的Web服务器设置

图标字体跨域访问的Web服务器设置

  1. 单击右键,选 Add...

图标字体跨域访问的Web服务器设置

  1. 加入值

图标字体跨域访问的Web服务器设置

参考资料

  1. 解决firefox和IE9对icon font字体的跨域访问问题

  2. 如何设置Access-Control-Allow-Origin