【发布时间】:2022-01-27 20:16:14
【问题描述】:
为了正确预加载字体文件,我们被告知我们总是需要将crossorigin 属性应用于我们的<link rel="preload" /> 标签,例如:
<link rel="preload" href="fonts/comicsans.woff2" as="font" type="font/woff2" crossorigin>
谁能告诉我这个的真正原因?我能找到的只是 MDN 中的链接,这些链接只是规定了这个要求,而没有详细说明原因:
https://developer.mozilla.org/en-US/docs/Web/HTML/Link_types/preload#cors-enabled_fetches
当预加载启用 CORS 获取的资源(例如 fetch()、XMLHttpRequest 或字体)时,需要特别注意设置元素的 crossorigin 属性。该属性需要设置为匹配资源的 CORS 和凭据模式,即使获取不是跨域的。
如上所述,字体文件是一个有趣的应用案例。 由于各种原因,必须使用匿名模式 CORS 来获取这些内容(请参阅字体获取要求)。
这似乎违反了我对 CORS 的理解,以及为什么它是必要的。我确定这是有充分理由的,只是找不到。
在任何人只链接到我正在谈论的相同文档之前,请参见下文:
https://drafts.csswg.org/css-fonts/#font-fetching-requirements
我真的很想得到真正了解为什么这是一项要求及其目的是什么的人的深入回答,并提供一些证据(文档等)来支持它。
【问题讨论】:
-
这也让我感到困惑。当字体文件位于另一个服务器/域上但预加载自托管字体文件时,Crossorigin 被认为是必要的。