OTF 字体的正确 MIME 类型
Posted
技术标签:
【中文标题】OTF 字体的正确 MIME 类型【英文标题】:Proper MIME type for OTF fonts 【发布时间】:2011-02-21 17:37:28 【问题描述】:在网络上搜索时,我发现了很多关于字体的正确 MIME 类型的不同建议,但我还没有尝试过任何能让我摆脱 Chrome 警告的 MIME 类型,如下所示:
资源解释为字体但使用 MIME 类型 font/otf 传输
字体是 OTF。
到目前为止,我已经尝试过以下 MIME 类型
字体/otf 应用程序/font-otf 应用程序/字体 应用程序/otf 应用程序/八位字节流 应用程序/x-font-otf application/x-font-TrueType(我知道它不是 truetype,但有一个消息来源引用了此用于 OTF)【问题讨论】:
您实际上是如何为此编写标题的?我不确定该怎么做。为您能提供的任何帮助而欢呼。 @Josh:如果您通过代码提供字体,您希望将“content-type”标头设置为“font/opentype”(如果您在我的问题中使用 OTF ),但如果您只是指向物理字体文件,则在 Web 服务器中设置 MIME 类型可能会更容易。我不知道您使用的是什么网络服务器,因此请在 Google 上搜索 yourserver + mime types 或在 SO 上提出一个新问题来描述您的问题。 标题错误。它应该是“如何在 Chrome 中使“资源解释为字体”警告静音 @djs:授予!你知道,如果我能找到一种方法让 Chrome 记住我希望我的控制台列出日志消息和错误,而不是警告,那么我很有可能一开始就不会问这个问题。 Chrome 警告我们它正在按照我们的要求行事。如果您将@font-face 与 .BMP 文件一起使用,我宁愿在它成功找出用于字形的位图时看到警告! 【参考方案1】:在 Apache 和 IIS 服务器上,可以为多种字体格式设置 MIME 类型。 I've traditionally had luck 带有以下内容:
svg as "image/svg+xml" (W3C: August 2011)
ttf as "application/x-font-ttf" (IANA: March 2013)
or "application/x-font-truetype"
otf as "application/x-font-opentype" (IANA: March 2013)
woff as "application/font-woff" (IANA: January 2013)
woff2 as "application/font-woff2" (W3C W./E.Draft: May 2014/March 2016)
eot as "application/vnd.ms-fontobject" (IANA: December 2005)
sfnt as "application/font-sfnt" (IANA: March 2013)
根据 Internet 工程任务组维护关于多用途 Internet 邮件扩展(MIME 类型)的初始文档:https://www.rfc-editor.org/rfc/rfc2045#section-5 ...它详细说明:
"预计会在更大的集合中添加 支持的类型通常可以通过创建新的来完成 这些初始类型的子类型。未来更多***类型 只能由本标准的标准轨道扩展来定义。 如果出于任何原因要使用另一个***类型,则必须是 以“X-”开头的名称表示其非标准状态 并避免与未来的正式名称发生潜在冲突。"
事实上,随着时间的推移,随着标准的创建和接受,额外的 MIME 类型被添加,因此我们看到了供应商特定 MIME 类型的示例,例如 vnd.ms-fontobject 等。
2013 年 8 月 16 日更新: WOFF 为 formally registered at IANA on January 3, 2013 和 Webkit has been updated on March 5, 2013,并且在其最新版本中获取此更新的浏览器将开始发出有关带有旧 x- 的服务器 MIME 类型的警告font-woff 声明。由于警告只是烦人,我建议立即切换到批准的 MIME 类型。在理想的世界中,警告会及时解决。
2015 年 2 月 26 日更新: WOFF2 现在包含在 W3C 编辑草案中,并带有建议的 mime 类型。按照最近的进度时间表,它可能会在明年(可能在 2016 年底)提交给 IANA。除了 SFNT,Google Web Fonts with their sfntly java library 的主干表参考中使用的可缩放/样条容器字体格式已经是registered as a mime type with IANA,也可以根据个人需要添加到此列表中。
2017 年 10 月 4 日更新:我们可以跟踪 WOFF2 格式 here 的进展,大多数现代浏览器都成功支持该格式。同样,我们可以按照 IETF 对 cmets (RFC) tracker 和 document 的“字体”***媒体类型请求,以获取最新的建议字体类型集以供批准。
对于那些希望在 CSS 中以正确顺序嵌入字体的人,请访问 this article。但是,我再次幸运地获得了以下订单:
@font-face
font-family: 'my-web-font';
src: url('webfont.eot');
src: url('webfont.eot?#iefix') format('embedded-opentype'),
url('webfont.woff2') format('woff2'),
url('webfont.woff') format('woff'),
url('webfont.ttf') format('truetype'),
url('webfont.svg#webfont') format('svg');
font-weight: normal;
font-style: normal;
对于 Subversion 自动属性,这些可以列为:
# Font formats
svg = svn:mime-type=image/svg+xml
ttf = svn:mime-type=application/x-font-ttf
otf = svn:mime-type=application/x-font-opentype
woff = svn:mime-type=application/font-woff
woff2 = svn:mime-type=application/font-woff2
eot = svn:mime-type=application/vnd.ms-fontobject
sfnt = svn:mime-type=application/font-sfnt
【讨论】:
好的,谢谢。我收到了 .woff 的错误消息,这在我的 .htaccess 文件中修复了它。我用AddType application/x-font-woff
application/x-font-opentype 和 application/x-font-ttf 适用于 Linux Gnome Shell
ttf、otf 和 woff2 已过时。见***.com/a/20723357/1356047【参考方案2】:
尝试使用“字体/opentype”。
【讨论】:
@busticated,你是怎么决定这个的?它正在成为一种标准吗? (对我有用,我写了一个关于 fontsquirrel 的请求,以便在他们的字体生成器中使用它...fontsquirrel.com/forum/discussion/361/mime-type-for-woff) 适用于我的 Chrome 22 和 Firefox 15 (Mac),适用于 SVG 和 WOFF 内联字体。 我遇到了与上述问题相同的错误,但我不知道将 MIME 类型“font/opentype”放在哪里...这是否位于 html 页面的标题中? 这个应该加在哪里?谢谢!font
类型现在是官方的iana.org/assignments/media-types/media-types.xhtml#font【参考方案3】:
忽略 chrome 警告。 OTF 字体没有标准的 MIME 类型。
font/opentype 可能会使警告静音,但这并不意味着它是“正确”的做法。
可以说,你最好编一个,例如使用“application/x-opentype”,因为至少“application”是注册的内容类型,而“font”不是。
更新:OTF 仍然是一个问题,但 WOFF 在 2013 年 1 月增加了 application/font-woff 的 IANA MIME 类型。
更新 2:OTF 在 2013 年 3 月增加了 MIME 类型:application/font-sfnt。此类型也适用于 .ttf
【讨论】:
有趣。你有任何支持这一点的参考资料吗? 没有 MIME 类型:“注意:因为没有为 TrueType、OpenType 和 WOFF 字体定义 MIME 类型,所以不考虑指定文件的 MIME 类型。” developer.mozilla.org/en/css/@font-face 。不要编造新的*** mime 类型,使用 x- 代替:tools.ietf.org/html/rfc2045#section-5 – djsadinoff 3 分钟前编辑 @djsadinoff 我相信 IANA 取代了 IETF。 IETF submits drafts to IANA,并且由于 IANA 报告 woff 是一种 MIME 类型,因此 IETF 在其有限列表中被覆盖。 @MikeKormendy,我不明白您的评论,但您可能指的是我的答案的先前版本,该版本仅针对 WOFF。我已经恢复原版了 @djsadinoff 这很奇怪,堆栈交换说你刚刚评论了“3 分钟前”。【参考方案4】:自 2017 年 2 月起,RFC 8081 将字体的所有 MIME 类型归为*** font
媒体类型。我原始帖子中的旧 MIME 类型现在被列为已弃用。
Font types as listed by IANA 现在是:
.otf ->
font/otf
.sfnt ->
font/sfnt
.ttf ->
font/ttf
.woff ->
font/woff
.woff2 ->
font/woff2
其他非标准字体格式保持不变:
.eot ->
application/vnd.ms-fontobject(自 2005 年 12 月起)
.svg ->
image/svg+xml(自 2011 年 8 月起)
[过时的原始帖子]
由于网络上对于网络字体的 MIME 类型仍有很多困惑,我想我会给出一个最新的答案,包括生效日期,以及指向 IANA 和 W3C 的支持链接。
以下是 Web 字体的官方 MIME 类型:
.eot ->
application/vnd.ms-fontobject(自 2005 年 12 月起)
.otf ->
application/font-sfnt(自 2013 年 3 月起)
.svg ->
image/svg+xml(自 2011 年 8 月起)
.ttf ->
application/font-sfnt(自 2013 年 3 月起)
.woff ->
application/font-woff(自 2013 年 1 月起)
.woff2 ->
font/woff2(W3C 于 2016 年 3 月提出)
请注意,W3C 在其 WOFF v2 提案中支持将上述所有内容更改为font/XXX
的 MIME 类型。这由The font Top Level Type 下的 Internet 工程任务组 (IETF) 进行跟踪,并于 2017 年 2 月被批准为 RFC 状态(请参阅RFC 8081),因此它可能会发生变化!
关于网络服务器的话题,值得一提的是,HTTP 响应可以gzip
(或以其他方式压缩)上述所有字体格式,.woff
和 .woff2
已经被高度压缩。
我在MIME Types for Web Fonts with (Fantom) BedSheet说更多。
【讨论】:
@SteveEynon : 基于 Presto 的 Opera 不会渲染带有图像 mime 类型的 ꜱᴠɢ 字体。 这与 Mozilla 列出的浏览器 common MIME types 一致。【参考方案5】:作为计算领域two hard things 之一的特定实例,有趣的是,自该问题最初发布以来,该问题的答案发生了怎样的变化。值得庆幸的是,这些力量已经为混乱带来了秩序:
今年(2017 年)2 月,W3C 发布了Standards TrackRFC 8081: The "font" Top-Level Media Type,它极大地简化了字体文件的适当媒体类型:
本备忘录用于注册和记录“字体”***媒体类型, 在哪些子类型下可以注册字体的表示格式。 本文件也可作为一组注册申请 预期的子类型,它们代表一些现有的子类型 已在使用中,并且当前在“应用程序”树下注册 他们单独的注册。
这是一个可读性很强的文档,它描述了导致媒体类型和子类型混淆的历史背景(“字体格式的注册”)。随着(相对)近期可下载网络字体的普及,W3C 认识到需要“直观的***字体类型”。他们想出的是……font
。
因此,IANA 已将其 official list of Media types 更新为 font
媒体类型及其当前识别的所有子类型:
collection font/collection
otf font/otf
sfnt font/sfnt
ttf font/ttf
woff font/woff
woff2 font/woff2
希望这是这个问题需要的最后一个答案。
【讨论】:
Anthony,除了我的帖子之外,这是另一个很棒的资源。感谢您在这里分享!【参考方案6】:这里是 nginx 解决方案
文件
/usr/local/nginx/conf/mime.types
添加
font/ttf ttf;
font/opentype otf;
application/font-woff woff2;
application/font-woff woff;
application/vnd.ms-fontobject eot;
删除
application/octet-stream eot;
感谢 Mike Fulcher
http://drawingablank.me/blog/font-mime-types-in-nginx.html
【讨论】:
【参考方案7】:关于在 Debian Linux 和 OS X Leopard 和 Snow Leopard 上测试的 Apache 2.2 VirtualHosting 和 mod_mime 的 FWIW:
如果您有一个 VirtualHost 配置,您将希望通过 AddType 指令添加类型,至少在配置的底部如下所示:
....
AddType font/opentype .otf
AddType font/ttf .ttf
</VirtualHost>
针对 Chrome Unstable/Trunk 和 Safari WebKit Nightly 进行了测试,消除了 ttf 和 otf 字体类型的 mime octet-stream 警告。
注意:.htaccess 在处理 VirtualHosting 时效果为零。如果您正在为多个站点进行开发,您将使用 VirtualHosting 开发,并且每个配置都需要添加这些 AddType。
【讨论】:
【参考方案8】:我刚刚对IANA official list 做了一些研究。我相信这里给出的答案 'font/xxx' 是不正确的,因为 MIME 标准中没有 'font' 类型。
根据 RFC 和 IANA,这似乎是截至 2013 年 5 月的当前状态:
这三个是官方的,由 IANA 分配:
svg as "image/svg+xml" woff 为 "application/font-woff" eot 为“application/vnd.ms-fontobject”这些不是官方/分配的,因此必须使用“x-”语法:
ttf as "application/x-font-ttf" otf as "application/x-font-opentype"application/font-woff 似乎是新的,并且可能是自 2013 年 1 月以来才正式使用的。因此“application/x-font-woff”可能在短期内更安全/更兼容。
【讨论】:
【参考方案9】:自 2013 年 3 月起,IANA.ORG recommends 为 .otf:application/font-sfnt
其他字体:
.eot -> application/vnd.ms-fontobject (as from December 2005)
.otf -> application/font-sfnt (as from March 2013)
.svg -> image/svg+xml (as from August 2011)
.ttf -> application/font-sfnt (as from March 2013)
.woff -> application/font-woff (as from January 2013)
见more...
【讨论】:
【参考方案10】:以下内容可用于电子书空间:
application/vnd.ms-opentype
我想这对于网络来说也是一样的。
【讨论】:
【参考方案11】:应用程序/font-woff 用于 woff: http://www.iana.org/assignments/media-types/application/font-woff
【讨论】:
【参考方案12】:截至 2017 年 2 月,RFC 8081 添加了 font/* 媒体类型,这些媒体类型也在 IANA Media Types 列表中列出。 font/otf
在此列表中。
【讨论】:
【参考方案13】:也许这会对某人有所帮助。我在 IIS 7 上看到 .ttf
已经是一种已知的 mime 类型。配置为:
application/octet-stream
所以我刚刚添加了所有 CSS 字体类型(.oet
、.svg
、.ttf
、.woff
),然后 IIS 开始为它们提供服务。 Chrome 开发工具也不会抱怨重新解释类型。
干杯, 迈克尔
【讨论】:
application/octet-stream
不是“已知类型”,而是“通用字节串”。 :) 浏览器抱怨服务于这种类型,因为它没有包含有关如何解释这些内容的信息。【参考方案14】:
消除来自 Chrome 的此警告的一种方法是更新 Chrome,然后确保您的 mime 类型是以下之一:
"font/ttf"
"font/opentype"
"application/font-woff"
"application/x-font-type1"
"application/x-font-ttf"
"application/x-truetype-font"
此列表根据在 Bug 111418 at webkit.org 找到的补丁。
同一补丁将消息从“警告”降级为“日志”,因此只需将 Chrome 升级到 2013 年 3 月后的任何版本即可摆脱黄色三角形。
由于问题是关于消除 Chrome 警告,而且人们可能出于任何原因保留旧版 Chrome,我认为这是值得添加的。
【讨论】:
以上是关于OTF 字体的正确 MIME 类型的主要内容,如果未能解决你的问题,请参考以下文章
安全地允许通过 MIME TYPES / fil 上传网络字体(ttf、eot、svg、woff、otf)
xml 在ASP.NET项目的Web.config中定义Web字体Mime类型,以确保Web服务器正确处理为您的字体提供服务。