PDF 文件的正确 MIME 媒体类型
Posted
技术标签:
【中文标题】PDF 文件的正确 MIME 媒体类型【英文标题】:Proper MIME media type for PDF files 【发布时间】:2010-09-23 15:46:21 【问题描述】:在处理 PDF 时,我遇到过 MIME 类型 application/pdf
和 application/x-pdf
等。
这两种类型有区别吗?如果有,那是什么?一个比另一个更受欢迎吗?
我正在开发一个必须交付大量 PDF 的网络应用程序,如果有的话,我想以正确的方式进行。
【问题讨论】:
【参考方案1】:标准媒体类型(以前称为 MIME 类型)是 application/pdf
。分配在RFC 3778, The application/pdf Media Type 中定义,引用自Media Types registry。
媒体类型由标准机构Internet Assigned Numbers Authority (IANA) 控制。这是管理根名称服务器和 IP 地址空间的同一组织。
x-pdf
的使用早于 PDF 媒体类型的标准化。 x-
命名空间中的媒体类型被认为是实验性的,就像 vnd.
命名空间中的媒体类型被认为是特定于供应商的一样。 x-pdf
可能用于兼容旧软件。
【讨论】:
2020 年更新: 此时,应该使用application/pdf
类型——除非你需要与真正的旧软件兼容,否则不要使用x-pdf
.. .
MediaType在哪里使用?我们可以忽略MimePart
和MimeKit
中的那些,电子邮件功能仍然有效【参考方案2】:
来自***媒体类型,
媒体类型由类型、子类型和可选 参数。例如,一个 html 文件可能被指定为 text/html;字符集=UTF-8。
媒体类型由***类型名称和子类型名称组成,即 进一步构造成所谓的“树”。
top-level type name / subtype name [ ; parameters ]
top-level type name / [ tree. ] subtype name [ +suffix ] [ ; parameters ]
所有媒体类型都应使用 IANA 注册程序进行注册。目前创建了以下树:standard
、vendor
、personal
或vanity
,未注册的x.
标准:
标准树中的媒体类型不使用任何树方面(前缀)。
type / media type name [+suffix]
示例:“应用程序/xhtml+xml”、“图像/png”
供应商:
供应商树用于与公开可用相关的媒体类型 产品。它使用
vnd.
facet。
type / vnd. media type name [+suffix] - used in the case of well-known producer
type / vnd. producer's name followed by media type name [+suffix] - producer's name must be approved by IANA
type / vnd. producer's name followed by product's name [+suffix] - producer's name must be approved by IANA
个人或名利树:
个人或名利树包括实验创建的媒体类型或 作为非商业分销产品的一部分。它用
prs.
方面。
type / prs. media type name [+suffix]
未注册的 x。树:
“x”。树可用于专门用于使用的媒体类型 在私人的、本地的环境中,并且只有在得到 交换它们的各方。无法注册此树中的类型。
根据之前版本的 RFC 6838 - 已过时的 RFC 2048 (1996 年 11 月出版)它应该很少,如果有的话,是必要的 使用未注册的实验类型,因此同时使用“x-” 和“x”。不鼓励使用表单。该 RFC 的早期版本 - RFC 1590 和 RFC 1521 声明使用“x-”表示法 子类型名称可用于未注册和私有子类型,但 该建议于 1996 年 11 月被废弃。
type / x. media type name [+suffix]
很明显,标准类型 MIME 类型 application/pdf
是合适的使用类型,而您应避免使用过时且未注册的 x-
媒体类型,如 RFC 2048 和 RFC 6838 中所述。
【讨论】:
【参考方案3】:这是RFC 2045 - Multipurpose Internet Mail Extensions (MIME) Part One: Format of Internet Message Bodies 中定义的约定。
可以定义私有[子类型]值(以“X-”开头) 两个合作代理之间的双边 外部注册或标准化。这样的价值观 无法注册或标准化。
应按照RFC 2048 中的说明向 IANA 注册新标准值。
类似的限制适用于***类型。来自同一来源,
如果出于任何原因要使用另一个***类型,它必须是 以“X-”开头的名称表示其非标准状态 并避免与未来的正式名称发生潜在冲突。
(请注意,根据 RFC 2045,“[m] 媒体类型和子类型的匹配始终不区分大小写”,因此 'X-' 和 'x-' 的解释没有区别。)
因此可以公平地猜测,在 IANA 定义“application/foo”之前使用了“application/x-foo”。不知道 IANA 令牌分配的人可能仍会使用它。
正如 Chris Hanson 所说,MIME 类型由 IANA 控制。这在RFC 2048 - Multipurpose Internet Mail Extensions (MIME) Part Four: Registration Procedures 中有详细说明。根据RFC 3778,即cited by the IANA作为“application/pdf”的定义,
application/pdf 媒体类型由 Paul Lindner 于 1993 年首次注册,供 gopher 协议使用;随后,Steve Zilles 于 1994 年更新了注册信息。
“application/pdf”类型已经存在了十多年。所以在我看来,在新应用中使用“application/x-pdf”的地方,这个决定可能不是经过深思熟虑的。
【讨论】:
以上是关于PDF 文件的正确 MIME 媒体类型的主要内容,如果未能解决你的问题,请参考以下文章
在 DRUPAL 中验证 PDF 文件上传中的 MIME 类型
Symfony:如何在 ppt 和 pptx 上获得正确的 mime 类型
来自 asp 应用程序的流式 mime 类型“应用程序/pdf”在 Google Chrome 中失败