【问题标题】:What is the correct MIME type for a font file?字体文件的正确 MIME 类型是什么?
【发布时间】:2012-09-21 12:59:52
【问题描述】:

我一直无法找到一个规范的来源,它表明任何和/或每种文件格式的正确 MIME 类型。我发现的所有来源似乎都相互矛盾和/或IANA MIME type RFCs and their associated list

虽然我对@9​​87654325@ (OpenType) 和.ttf (TrueType) 文件类型特别感兴趣,但理想的答案是为确定广泛的 MIME 类型提供规范资源字体文件格式,例如the Font file section of the Wikipedia page: List of file formats 中列出的那些。但是,鉴于我找不到这样的资源,似乎完全有可能不存在这样的规范参考。

我想进一步澄清一下,我不是在寻找工作的 MIME 类型,而是寻找规范的 MIME 类型Proper MIME type for fonts 的选定答案表明font/opentype 可用于.otf 文件。然而,正如投票最高的答案(@djsadinoff)所解释的那样,font 不是有效的 IANA 内容类型,它不能是正确 MIME 类型。

【问题讨论】:

  • 自 2017 年以来,这个问题有an official answer。这是一个温和的戳,建议你接受它。

标签: fonts mime-types mime truetype iana


【解决方案1】:

对于您的问题,您可能不知道有关字体类型的事实。使用此链接Font MIME Types

roc reports on the Web Fontsbattle 其中简短版是非IE浏览器是否应该支持DRM格式的字体。 (也许他们是否可以开箱即用地支持 TrueType 和 OpenType。)我真的不认为我们应该支持字体的 DRM 格式。似乎它会在网络上开创一个不好的先例,如果供应商没有正确执行事情,可能会让供应商承担责任,并使作者的事情变得复杂。

W3C 已创建draft charter for an EOT Working Group; EOT(嵌入式 OpenType)是微软提倡的 DRM 格式。我不知道 EOT 是如何让网络充分发挥其潜力的,但我们会看到它的结果。

除了格式问题,可能值得考虑为字体引入 MIME 类型。 (如果这对于此时的实现来说为时已晚,则可能为时已晚。)好处是任意文件(例如,文本/html 文件)不会被解释为字体。不利的一面是,这使作者的工作变得更加困难,因为他们必须确保正确标记它。 (在 Web 图像(SVG 除外)和 JavaScript 上,不会检查资源是否具有正确的 MIME 类型。对于图像,浏览器会嗅探图像签名并简单地执行从脚本元素加载的内容(确实不太好) .)

鉴于支持@font-face 将很快在 Opera、Safari 和 Firefox 中发布,因此需要尽快做出决定。可能在相关 MIME 类型通过 IETF 标准化之前。另一个复杂之处是 OpenType 和 TrueType 可以携带 otf 和 ttf 作为扩展名,操作系统可以很好地处理它。不过,对两者使用单一的 MIME 类型可能会起作用,就像 XHTML 和 SVG 都可以使用 text/xml。

【讨论】:

    【解决方案2】:

    字体文件缺乏特定的媒体类型导致上面 smartcaveman 描述的混乱、不断变化和矛盾的混乱。早在 2012 年,这个问题就无法真正得到回答,因为除了 IANA 列表之外,确实不存在这样的规范参考。值得庆幸的是,这种情况已经得到纠正……

    今年(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
    

    【讨论】:

      【解决方案3】:

      您的答案在specs

      4.5.1。八位字节流子类型

      “octet-stream”子类型用于指示主体包含 任意二进制数据。

      也在同一文档的第 4 页上

      (5)   application -- some other kind of data, typically
            either uninterpreted binary data or information to be
            processed by an application.  The subtype "octet-
            stream" is to be used in the case of uninterpreted
            binary data, in which case the simplest recommended
            action
      

      我仍然不确定这个文件是否是二进制数据,所以我使用 linux file() 命令检查了 mime-type。

          $ file --mime-type 
          Days-webfont.ttf: application/octet-stream
      

      你去吧,它是一个非常清晰的八位字节流!

      我仍然有些怀疑,所以我想要更多资源。浏览器将如何解释这一点? Here is what Mozilla has to say...

      注意:因为没有为 TrueType、OpenType、 和 Web 开放文件格式 (WOFF) 字体,文件的 MIME 类型 不考虑指定的。

      有趣的 Mozilla 说 没有为 .ttf .otf 或 .woff 定义 MIME 类型

      Mozilla 也有一些资源可以帮助您

      determine the correct MIME type of your content

      如何为您的内容确定正确的 MIME 类型

      您可以采取几个步骤来确定正确的 要用于您的内容的 MIME 类型值。

      如果您的内容是使用供应商的软件应用程序创建的,请阅读供应商的 >文档以了解应该为不同的媒体类型报告哪些 MIME 类型。

      查看 IANA | MIME 媒体类型注册表,其中包含所有已注册的 MIME 类型。

      如果使用 Netscape Gecko 中的插件显示媒体类型,请安装插件并 > 然后查看“帮助”->“关于插件”菜单以查看哪些 MIME 类型与 >媒体类型相关联。

      在 FILExt 或文件扩展名参考中搜索文件扩展名以查看哪些 MIME >类型与该扩展名相关联。

      我不建议你去 FILExt 页面或文件扩展名参考,它们不会做 file() 在 bash 中做不到的任何事情。

      通过文档搜索,我发现了几乎符合要求的各种应用程序子类型; vnd.ms-fontobject,但这仅适用于.eot 文件,font-tdpfr,但这仅适用于.pfr 文件。

      所以看起来规格没有指定

      我深信不疑。 所以我猜你的规范资源会将 file() 的输出与规范中的内容进行比较。

      【讨论】:

      • application/octet-stream 是一个通用的包罗万象。问题是它没有向客户表明有关该文件的任何信息。它只是包含二进制数据的所有文件类型的超类。 (例如,您可以将 pdf 标记为 application/octet-stream,但其具体类型为 application/pdf
      • 对。我明白,但是没有规范application/octet-stream 是我们现在所拥有的。
      • 并不是我认为你错了,我只是希望我们俩都没有发现什么。
      • @shakabra 是对的。您应该使用application/octet-stream,因为它适合各种二进制数据。尝试“发明”自己的 mime 类型不会带来任何好处。
      【解决方案4】:

      正如其中一位 cmets 所说:

      更好的 mime 类型是“application/x-font-opentype”或“application/octet-stream”。第一个基本上是“具有此名称的未注册 mimetype”,第二个只是“二进制数据”

      其中任何一个在技术上都是正确的正确,因为第一个是非官方类型的公认 MIME 类型格式,第二个是二进制数据的通用 MIME 类型,没有更具体的官方 MIME 类型。我针对RFC2046 验证了这一说法,它似乎成立了。在成为正式类型之前,最正确的方法是对非官方类型使用公认的格式,或者使用泛型类型。

      【讨论】:

        【解决方案5】:

        此时,OpenType 和 TrueType 似乎没有任何特别“正确”的 MIME 类型。

        Web 开放字体格式(可用作两者的包装器)具有application/font-woff(由W3C 注册)。 Embedded OpenType 格式(OpenType 的紧凑版本)使用 application/vnd.ms-fontobject(由 Microsoft 注册)。

        如果您想回到过去,您可以使用 application/font-tdpfr 获取 TrueDoc 便携式字体资源。 Netscape Navigator 4 原生支持此功能。☺

        【讨论】:

          猜你喜欢
          • 2017-12-19
          • 1970-01-01
          • 2013-01-22
          • 2011-04-13
          • 2015-03-29
          • 2011-02-21
          相关资源
          最近更新 更多