如何防止 Chrome/FF 由于 CORS 策略而阻止 CDN 字体?

Posted

技术标签:

【中文标题】如何防止 Chrome/FF 由于 CORS 策略而阻止 CDN 字体?【英文标题】:How to prevent Chrome/FF blocking CDN fonts due to CORS policy? 【发布时间】:2017-06-24 03:07:58 【问题描述】:

我刚刚将一个 (Wordpress) 网站迁移到一个新的托管位置。

该网站运行良好,除了 Chrome 和 Firefox 不显示某些字体。

Access to Font at 'http://example.com/site/wp-content/themes/mytheme/fonts/modules.ttf' 
from origin 'http://example.com' has been blocked by CORS policy: 
No 'Access-Control-Allow-Origin' header is present on the requested resource. 
Origin 'http://example.com' is therefore not allowed access.

我使用 Cloudfront 来提供字体(我使用 example.com 作为来源,而不是 S3)。 Wordpress .htaccess 包含以下内容:

<IfModule mod_headers.c>
<FilesMatch "\.(eot|font.css|otf|ttc|ttf|woff)$">
    Header set Access-Control-Allow-Origin "*"
</FilesMatch>
</IfModule>
<IfModule mod_mime.c>

# Web fonts
AddType application/font-woff woff
AddType application/vnd.ms-fontobject eot

AddType application/x-font-ttf ttc ttf
AddType font/opentype otf

AddType     image/svg+xml svg svgz
AddEncoding gzip svgz

</IfModule>

调试/解决此问题的明智方法是什么?

【问题讨论】:

据我了解,您将 .htaccess 放在 WordPress 端,对吗?但它应该在字体所在的“服务器”端。根据 CORS,资源(字体)的所有者授予对客户端服务器(WordPress 站点)的访问权限。 感谢@KAGGDesign,我是新手,解释得不是很好。据我了解,Wordpress 网站 服务器。 CDN 的来源是 Wordpress 站点。例如,如果我在 S3 存储桶中托管字体,则将访问策略添加到该存储桶是相对简单的。但是以 WP 站点为来源,我不清楚如何配置。 同样奇怪的是 Safari 加载字体没有问题 与其他浏览器不同,Safari 不(当前)对 @font-face 强制执行 CORS 限制 感谢@sideshowbarker,我不认为 Chrome 对 CORS 字体的限制过于严格。但也许这已经改变了? 【参考方案1】:

经过大量谷歌搜索和试验,结果证明我需要在新服务器上启用 mod_headers 模块。

sudo a2enmod headers
sudo service apache2 reload

在这里发帖希望能在将来避免别人头疼。

【讨论】:

以上是关于如何防止 Chrome/FF 由于 CORS 策略而阻止 CDN 字体?的主要内容,如果未能解决你的问题,请参考以下文章

同源策略与 CORS 的用处

使用 javascript 和 ajax 读取 json 对象由于 CORS 策略而出现错误

由于被CORS策略(javascript,html和css)阻止,程序在Firefox中运行但不是chrome

.Net Core Cors中间件解析

Jsonp&Cors跨域(同源策略跨域劫持漏洞)

同源策略和CORS(跨域资源共享)