我刚刚注意到几个网站上的字体真棒图标不显示在谷歌浏览器。控制台显示以下错误:
来源'http://cdn.keywest.life'的字型已被跨来源资源共用原则封锁,无法载入:请求的资源上不存在"Access-Control-Allow-Origin"标头。因此不允许访问源"http://www.keywest.life"。
我在其他几个网站上发现了完全相同的问题。这可以很容易地通过将自己的CDN引用替换为:
//maxcdn.bootstrapcdn.com/font-awesome/4.2.0/css/font-awesome.min.css
- 然而,这不是解决方案,只是一个变通办法。我很想知道原因和正确的解决方案。
(the起因是这样的:该网站使用自己的CDN,由MaxCDN提供,并引用了字体awesome字体,这些字体不是由Chrome加载的,如果您从Bootstrapcdn资源加载相同的资源(如上所述),它会工作)
下面是这个问题的一个例子(在菜单和页脚的社交图标中:http://www.keywestnight.com/fantasy-fest)的数据
感谢您的帮助/解释!
7条答案
按热度按时间velaa5lx1#
以下是允许从所有域访问webfonts的工作方法:
wd2eg0qa2#
问题不在于CSS文件,而在于字体文件的服务方式。
这会导致浏览器从CSS文件所在的服务器上请求一个合适的字体文件(eot,woff,ttf或svg)。
然而,当浏览器从
cdn.keywest.life
请求该字体文件时,它读取Access-Control-Allow-Origin
头文件的头文件,但没有找到,因此它给出了该错误消息。(这对我来说像是浏览器的bug,因为它与CSS文件来自同一个服务器)。相反,当你使用
maxcdn.bootstrapcdn.com
时,响应中会包含Access-Control-Allow-Origin:*
头文件,浏览器会接受这个字体文件。如果你的cdn服务器包含了这个头文件,那么它也会工作。如果您有Apache服务器,请参阅以下答案:Font-awesome not properly displaying on Firefox / how to vend via CDN?
qcbq4gxm3#
访问font-awesome资产的问题对于许多人来说是一个问题,没有对该问题的全面解释和解决方案。
什么是CORS:
跨源资源共享(CORS)是一种使用附加HTTP头的机制,它允许用户代理从与当前使用的站点不同的源(域)上的服务器获取访问所选资源的权限。当用户代理从与生成当前文档的域、协议或端口不同的域、协议或端口请求资源时,它会发出跨源HTTP请求。
https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS
问题:
问题源于font-awesome字体的加载方式。
字体是通过样式表(CSS)加载的。这里的情况是:
解决方案:
虽然已在文件存储(例如S3)上创建了CORS规则,并且已将资源访问权限授予相关域,但当CDN尝试加载CSS中指定的字体时,加载这些字体时指定的源/域是CDN的源/域,但未将CORS访问权限授予CDN域。
为CDN域创建CORS规则。
ebdffaop4#
我使用的CDN不允许我修改它的响应,所以我修改了
font-awesome.min.css
,用绝对路径替换了相对路径,它工作了。goucqfw65#
没有一个答案对我有效,我不得不在maxcnd后台创建一个边缘规则(它会更改您区域上的配置文件)
此处提供更多信息
https://www.maxcdn.com/one/tutorial/edge-rules-recipes/https://www.maxcdn.com/one/tutorial/create-a-rule/显示器
edqdpe6u6#
解决这个问题的办法是使用另一个cdn的fontawesome。
https://www.cdnpkg.com/font-awesome/5.11.0
bfhwhh0e7#
如果你和我一样,使用的是官方的WordPress字体真棒插件,你会想进入设置,从“使用CDN”切换到“使用工具包”。