PDF 文件的正确 MIME 媒体类型

Posted

技术标签:

【中文标题】PDF 文件的正确 MIME 媒体类型【英文标题】:Proper MIME media type for PDF files 【发布时间】:2010-09-23 15:46:21 【问题描述】:

在处理 PDF 时,我遇到过 MIME 类型 application/pdfapplication/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在哪里使用?我们可以忽略MimePartMimeKit 中的那些,电子邮件功能仍然有效【参考方案2】:

来自***媒体类型,

媒体类型由类型、子类型和可选 参数。例如,一个 html 文件可能被指定为 text/html;字符集=UTF-8。

媒体类型由***类型名称和子类型名称组成,即 进一步构造成所谓的“树”。

top-level type name / subtype name [ ; parameters ]

top-level type name / [ tree. ] subtype name [ +suffix ] [ ; parameters ]

所有媒体类型都应使用 IANA 注册程序进行注册。目前创建了以下树:standardvendorpersonalvanity,未注册的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 中失败

我能否可靠地找出正确的 mime 类型来提供不受信任的内容?

下载流媒体不返回真实文件。错误的内容类型或 mime?

为啥 php 不能正确检测到 pdf mime 类型(wkhtmltopdf)?