针对字体 MIME 类型的 Apache AddType 指令应该如何正确设置?

46
我将使用@font-face来嵌入字体(感谢Paul Irish)。在尝试修复Chrome有关woff字体MIME类型错误的警告时,我发现了大量冲突的建议。
似乎每个人都同意应该使用.eot字体(适用于IE 6-8?)进行服务。
AddType application/vnd.ms-fontobject .eot

对于 .ttf 字体(旧的非IE浏览器?),我见过

AddType application/x-font-ttf        .ttf
AddType application/octet-stream      .ttf
AddType font/truetype                 .ttf
AddType font/ttf                      .ttf

对于.woff字体(新标准?),我已经看到

AddType application/font-wof          .woff
AddType application/x-font-woff       .woff
AddType application/x-woff            .woff

我知道对于woff文件,正确的MIME类型应该是application/font-woff,但在官方标准出台之前,Chrome浏览器能够理解的是application/x-font-woff。 我意识到我在提问时已经回答了一半,但问题实际上是:有没有关于字体应该使用哪些MIME类型的权威指导或进一步建议?
更新(如果对其他人有帮助):由于似乎没有权威指导,我已经在我的.htaccess中使用了以下字体MIME类型(至少让Chrome浏览器满意):
AddType application/vnd.ms-fontobject .eot
AddType application/x-font-ttf        .ttf
AddType application/x-font-woff       .woff

1
+1 我正试图将此放入框架中,这样即使浏览器可以处理“application/octet-stream”,我也想以“正确”的方式来实现互操作性(例如允许用户为某些内容类型启用gzip)。 - Martin
感谢您分享您所使用的解决方案! - shedd
6个回答

77

我知道这个问题很旧了,但对于任何想要快速复制/粘贴将字体MIME类型添加到他们的 .htaccess 文件的人:

<IfModule mod_mime.c>
    AddType application/vnd.ms-fontobject    .eot
    AddType application/x-font-opentype      .otf
    AddType image/svg+xml                    .svg
    AddType application/x-font-ttf           .ttf
    AddType application/font-woff            .woff
    AddType application/font-woff2           .woff2
</IfModule>

@Chris Clower 这是我的问题链接,帮我看看吧 - user1999510
2
@VivekVikranth 它应该能够安全地粘贴到 .htaccess 文件的任何位置,只要确保不要将其粘贴在一组标记内,例如 <IfModule>。把它放在文件的第一行或最后一行都可以。 - Chris Clower
1
值得一提的是,Apache的mime.types文件列出了所有这些内容类型。检查方法是查看服务器响应头并查看是否具有content-type。 - Noodles
@ChrisClower,为什么这个不应该放在标签内?我也应该移出其他行,比如css、html、jpg等等吗? - Morgan Laco

7

我刚刚在IANA官方列表上进行了一些研究。截至2013年5月,以下是当前状态:

以下三个是官方的并由IANA分配的:

  • svg,作为"image/svg+xml"
  • woff,作为"application/font-woff"
  • eot,作为"application/vnd.ms-fontobject"

以下不是官方/未分配的,因此必须使用“x-”语法:

  • ttf,作为"application/x-font-ttf"
  • otf,作为"application/x-font-opentype"

似乎“font”类型不存在,因此任何时候您看到“font/xxx”都是虚假的。可能“x-font/xxx”是可以接受的,不确定。IIS8随附了几个这样的条目。不确定微软是否认为这些“font/xxx”是为了兼容性而需要的,还是他们只是没有阅读RFC :-)

application/font-woff似乎是新的,也许自2013年1月以来才成为官方。因此,“application/x-font-woff”在短期内可能更安全/更兼容。


4
通常,MIME类型来自RFC。您可以在IANA网站上找到详尽的列表,但没有引用字体扩展名。此外,描述WOFF格式的文档是草案,并且不涉及要使用的MIME类型。目前似乎不存在可靠的有关该主题的参考资料。

更新

W3C现已发布了WOFF推荐,并在附录B中将MIME类型定义为application/font-woff。它现在也已添加到您提到的IANA网站-GKFX


3
提示:application/font-woff MIME 类型现已被弃用,请改用 font/woff。请参阅 IANA 网站 - QSoto

3

在 SO 上,重复的帖子会被自动检测到,并且您有可能会 同时 被删除。 - Borodin

3

2019年你可以使用:

AddType font/otf .otf
AddType font/ttf .ttf
AddType font/woff .woff
AddType font/woff2 .woff2
AddType application/vnd.ms-fontobject .eot

1
这是一个关于在Apache中缓存所有字体类型的示例(在Google Page Speed上进行过测试):
AddType application/font-sfnt            otf ttf
AddType application/font-woff            woff
AddType application/font-woff2           woff2
AddType application/vnd.ms-fontobject    eot


ExpiresByType application/font-woff "access plus 1 month" 
ExpiresByType application/font-woff2 "access plus 1 month"
ExpiresByType application/font-sfnt "access plus 1 month"
ExpiresByType application/vnd.ms-fontobject "access plus 1 month"

1
你可以使用更简单的 font/woff 替代 application/font-woff - Khom Nazid

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接