CSS 解惑 - font-face 引用字体跨域

发布于 2023-07-12 02:04:43 字数 2409 浏览 42 评论 0

我们知道页面直接进入 CSS 文件是不存在跨域问题的,但是有没有遇到过 CSS 中依赖的字体会存在跨域问题?

问题

比如,现在矢量小图标非常流行,也有一些开源的矢量图库让你用,比如我们将 font-awesome 这个 CSS 部署到一台服务器上,在另一台服务器访问。如:我们在 y.domain.com 地址中请求 x.domain.com 的这个资源。

<link href="//x.domain.com/font-awesome/4.7.0/css/font-awesome.css" rel="stylesheet">

你会看到类似的跨域的错误:

原因

font-awesome.css 依赖了字体文件:

@font-face {
  font-family: 'FontAwesome';
  src: url('../fonts/fontawesome-webfont.eot?v=4.6.3');
  src: url('../fonts/fontawesome-webfont.eot?#iefix&v=4.6.3') format('embedded-opentype'), url('../fonts/fontawesome-webfont.woff2?v=4.6.3') format('woff2'), url('../fonts/fontawesome-webfont.woff?v=4.6.3') format('woff'), url('../fonts/fontawesome-webfont.ttf?v=4.6.3') format('truetype'), url('../fonts/fontawesome-webfont.svg?v=4.6.3#fontawesomeregular') format('svg');
  font-weight: normal;
  font-style: normal;
}

原因就在这里了, font-face 本身是有跨域问题的!也就是说,使用 font-face 所使用的字体一定要与当前页面在同一个域下,要么就看下面的解决办法。

解决

解决方案,就是使用 HTTP access controls 来处理。具体办法,就是将部署当前 CSS 的服务器做跨域支持,比如对于 Apache 的 .htaccess 中增加以下配置:

AddType application/vnd.ms-fontobject .eot
AddType font/truetype .ttf
AddType font/opentype .otf
AddType font/opentype .woff
AddType image/svg+xml .svg .svgz
AddEncoding gzip .svgz
<FilesMatch "\.(ttf|otf|eot|woff|svg)$">
	<IfModule mod_headers.c>
	      Header set Access-Control-Allow-Origin "*"
	</IfModule>
</FilesMatch>

如果你是其它的服务器,那么请自行处理下字体资源的跨域问题就行了。

参考

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

南汐寒笙箫

暂无简介

文章
评论
605 人气
更多

推荐作者

櫻之舞

文章 0 评论 0

弥枳

文章 0 评论 0

m2429

文章 0 评论 0

野却迷人

文章 0 评论 0

我怀念的。

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文