css加载字体的跨域问题

十度 CSS 2016年04月18日 收藏

刚才碰到一个css加载字体跨域问题,记录一下啊。

站点的动态请求与静态文件请求是不同的域名的。站点的域名为 www.domain.com,而静态文件的域名为 st.domain.com。

问题:

页面中加载css文件:<link rel="stylesheet" href="http://st.domain.com/css/uniform.css" />

此css中调用了外部字体如下:

  1. @font-face {
  2.   font-family: 'FontAwesome';
  3.   src: url('../font/fontawesome-webfont.eot');
  4.   }

浏览器报请求跨域的错误。

解决方案:

我们使用Access-Control-Allow-Origin:* 通过启用cors 来解决跨域问题。

具体步骤如下:

1.开启apache的mod_headers模块

LoadModule headers_module modules/mod_headers.so

2.在st.domain.com的主机配置中加入

nginx

  1. server {
  2.     ...
  3.     # Fix @font-face cross-domain restriction in Firefox
  4.     location ~* \.(ttf|ttc|otf|eot|woff|font.css){
  5.         add_header Access-Control-Allow-Origin "http://www.shouce.ren";
  6.     }
  7.     ...
  8. }

apache

  1. <FilesMatch "\.(ttf|ttc|otf|eot|woff|font.css)$">
  2.   <IfModule mod_headers.c>
  3.     Header set Access-Control-Allow-Origin "http://www.shouce.ren"
  4.   </IfModule>
  5. </FilesMatch>

重启apache。

还可以添加mine

  1. AddType application/vnd.ms-fontobject .eot
  2. AddType font/ttf .ttf
  3. AddType font/otf .otf
  4. AddType application/x-font-woff woff