1.2.1 Web 资源——媒体类型(MIME)

WEB前端 waitig 437℃ 百度已收录 0评论

1. 背景知识

  1. MIME媒体类型(Multipurpose Internet Mail Extension,多用途因特网邮件扩展):是描述报文实体主体内容的一些标准化名称。最初设计 MIME是为了解决在不同的电子邮件系统之间搬移报文时存在的问题。MIME 在电子邮件系统中工作得非常好,因此 HTTP 也采纳了它,用它来描述并标记多媒体内容。
  2. Web 服务器会为所有 HTTP 对象数据附加一个 MIME 类型。
    这里写图片描述
  3. 当 Web 浏览器从服务器中取回一个对象时,会去查看相关的 MIME 类型,看看它是否知道应该如何处理这个对象。
  4. 大多数浏览器都可以处理数百种常见的对象类型:显示图片文件、解析并格式化 HTML 文件、通过计算机声卡播放音频文件,或者运行外部插件软件来处理特殊格式的数据。
  5. MIME 类型是一种文本标记,表示一种主要的对象类型和一个特定的子类型,中间由一条斜杠来分隔。常见的 MIME 类型有数百个,实验性或用途有限的 MIME 类型则更多。
    常见类型:

    • HTML 格式的文本文档由 text/html 类型来标记。
    • 普通的 ASCII 文本文档由 text/plain 类型来标记。
    • JPEG 格式的图片为 image/jpeg 类型。
    • GIF 格式的图片为 image/gif 类型。
    • Apple 的 QuickTime 电影为 video/quicktime 类型。
    • 微软的 PowerPoint 演示文件为 application/vnd.ms-powerpoint 类型。
  6. MIME 主要由下列 5 份文档定义:

    1. RFC 2045,“MIME: Format of Internet Message Bodies”(“MIME: 因特网报文主体的格式”):
      描述了 MIME 报文结构的概况,并介绍了 HTTP 借用的 Content-Type 首部。
    2. RFC 2046,“MIME: Media Types”(“MIME:媒体类型”):
      介绍了 MIME 类型及其结构。
    3. RFC 2047,“MIME: Message Header Extensions for Non-ASCII Text”(“MIME: 非 ASCII 文本的报文首部扩展”):
      定义了一些在首部包含非 ASCII 字符的方式。
    4. RFC 2048,“MIME: Registration Procedures”(“MIME:注册过程”):
      定义了如何向因特网号码分配机构(“Internet Assigned Numbers Authority,IANA”)注册 MIME 值。
    5. RFC 2049,“MIME: Conformance Criteria and Examples”(“MIME:一致性标准及实例”):
      详细介绍了一致性规则,并提供了一些实例。

    根据 HTTP 的目标,我们最感兴趣的文档是 RFC 2046 和 RFC 2048。

2. MIME类型结构

  • 每种 MIME 媒体类型都包含类型、子类型和可选参数的列表。类型和子类型由一个斜杠分隔,如果有可选参数的话,则以分号开始。
  • 在 HTTP 中,MIME 媒体类型被广泛用于 Content-Type 和 Accept 首部。比如:
Content-Type: video/quicktime
Content-Type: text/html; charset="iso-8859-6"
Content-Type: multipart/mixed; boundary=gc0p4Jq0M2Yt08j34c0p 
Accept: image/gif

1. 离散类型

MIME 类型可以直接用于描述对象类型,也可以用于描述其他对象类型的集合或类型包。如果直接用 MIME 类型来描述某个对象类型,它就是一种离散类型(discrete type)。其中包括文本文件、视频和应用程序特有的文件格式。

2. 复合类型

如果 MIME 类型描述的是其他内容的集合或封装包,这种 MIME 类型就被称为复合类型(composite type)。复合类型描述的是封装包的格式。将封装包打开时,其中包含的每个对象都会有其各自的类型。

3. 多部分类型

多部分媒体类型是复合类型。多部分对象包含多个组件类型。下面是一个多部分/混合内容实例,每个组件都有自己的 MIME 类型:

Content-Type: multipart/mixed; boundary=unique-boundary-1 --unique-boundary-1
Content-type: text/plain; charset=US-ASCII
Hi there, I'm some boring ASCII text...
--unique-boundary-1
Content-Type: multipart/parallel; boundary=unique-boundary-2
--unique-boundary-2 
Content-Type: audio/basic
... 8000 Hz single-channel mu-law-format audio data goes here ...
--unique-boundary-2 
Content-Type: image/jpeg
... image data goes here ...
--unique-boundary-2--
--unique-boundary-1 
Content-type: text/enriched
This is <bold><italic>enriched.</italic></bold> <smaller>as defined in RFC 1896</smaller>
Isn't it <bigger><bigger>cool?</bigger></bigger> 
--unique-boundary-1
Content-Type: message/rfc822
From: (mailbox in US-ASCII)
To: (address in US-ASCII)
Subject: (subject in US-ASCII)
Content-Type: Text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: Quoted-printable
... Additional text in ISO-8859-1 goes here ... 
--unique-boundary-1--

4. 语法

  • MIME 类型由主类型、子类型和可选参数的列表组成。
  • 主类型:可以是预定义类型、IETF 定义的扩展标记,或者(以“x-”开头的)实验性标记。
常见主类型描述
application应用程序特有的内容格式(离散类型)
audio音频格式(离散类型)
chemical化学数据集(离散 IETF 扩展类型)
image图片格式(离散类型)
message报文格式(复合类型)
model三维模型格式(离散 IETF 扩展类型)
multipart多部分对象集合(复合类型)
text文本格式(离散类型)
video视频电影格式(离散类型)

* 子类型:可以是主类型(比如,“text/text”)、IANA 注册的子类型,或者是(以“x-”开头的)实验性扩展标记。
* 类型和子类型都是由 US-ASCII 字符的一个子集构成的。空格和某些保留分组以及标点符号称为“tspecials”,它们是控制字符,不能用于类型和子类型名。
* RFC 2046 定义的语法如下所示:

TYPE := "application" | "audio" | "image" | "message" | "multipart" |
        "text" | "video" | IETF-TOKEN | X-TOKEN
SUBTYPE := IANA-SUBTOKEN | IETF-TOKEN | X-TOKEN

IETF-TOKEN := <extension token with RFC and registered with IANA> 
IANA-SUBTOKEN := <extension token registered with IANA>
X-TOKEN := <"X-" or "x-" prefix, followed by any token>

PARAMETER := TOKEN "=" VALUE
VALUE := TOKEN / QUOTED-STRING
TOKEN := 1*<any (US-ASCII) CHAR except SPACE, CTLs, or TSPECIALS> 
TSPECIALS :=  "(" | ")" | "<" | ">" | "@" |
              "," | ";" | ":" | "\" | <"> | 
              "/" | "[" | "]" | "?" | "="

3. 在IANA注册MIME类型(仅供了解)

RFC 2048 描述了 MIME 媒体类型的注册过程。使用注册过程的目的不仅能简化注册新媒体类型的过程,而且还能提供一些完整性检测,以确保新类型是经过深思熟虑后提出的。

1. 注册树

MIME 类型标记被分成了 4 类,称为“注册树”,每一类都有自己的注册规则。

注册树举例描述
IETFtext/html(HTML 文本)IETF 树用于那些对因特网来说具有普遍意义的类型。新的 IETF 树媒体类型要由因特网工程指导组 (Internet Engineering Steering Group,IESG) 审批,并且要有一个附属的标准追踪 RFC。 IETF 树类型标记中没有句点(.)
厂商(vnd.)image/vnd.fpx(柯达的 FlashPix 图片 )厂商树用于可商用产品的媒体类型。鼓励大家进行新厂商类型的公开评审,但并不强制这么做。 厂商树类型以 vnd. 开头
个人 / 不重要的(prs.)image/prs.btif(美国国家银行使用的内 部检查管理格式)私有、个人或不重要的媒体类型可以注册在个人树中。这些媒体类型不应该进行商业化发布。 个人数类型以 prs. 开头
实验性(x- 或 x.)application/x-tar (Unix的tar档案)实验树用于未注册或实验性的媒体类型。由于注 册新的厂商或个人媒体类型的过程相对简单,所以不应该广泛地发布使用 x- 类型的软件。 实验树类型以 x. 或 x- 开头

2. 注册过程

关于 MIME 媒体类型的注册过程请仔细阅读 RFC 2048。
基本的注册过程并不是官方的标准过程,只是一个管理过程,目的是在尽短时间内,就能通过 IANA 对新类型的完整性检查,将其记录在注册表中。这个过程遵循下列步骤:
1. 将媒体类型提交给 IANA 审阅
向 ietf-types@iana.org 邮件列表发送一封媒体类型注册建议书,审阅期为两周。 发布公告,征求公众对名字、互操作性和安全问题的反馈意见。在注册完成之 前,都可以使用 RFC 2045 中指定的前缀 x-。
2. IESG 审批(仅对 IETF 树而言)
如果要将媒体类型注册到 IETF 树中去,就必须提交给 IESG 审批,而且必须有
一个附加的标准追踪 RFC。
3. IANA 注册
只要媒体类型达到了审批要求,作者就可以通过例 D-1 中的电子邮件模板向 IANA 提交注册请求,并将注册信息发送到 ietf-types@iana.org。IANA 会注册 媒 体 类 型, 在 http://www.isi.edu/in-notes/iana/assignments/media-types/ 上 向 公 众提供该媒体类型应用程序。

3. 注册规则

只有在响应 IESG 批准某指定注册申请的通知时,IANA 才能在 IETF 树中注册媒体类型。
只要满足下面这些条件,IANA 就会自动注册厂商和个人类型,不需要进行任何正 式的审查。
1. 媒体类型一定要像实际的媒体格式一样工作。像传输编码或字符集那样工作的类型是不能注册为媒体类型的。
2. 所有媒体类型都要有适当的类型和子类型名。所有类型名都要由标准追踪 RFC 定义。所有子类型名都必须是唯一的,必须与那类名称的 MIME 语法相符,而 且必须包含恰当的树前缀。
3. 个人树类型必须提供格式规范或指向格式规范的指针。
4. 不要忽略安全问题。所有开发因特网软件的人都要为防范安全漏洞作出贡献。

4. 注册模版

实际的 IANA 注册是通过电子邮件完成的。可以用以下模板来完成注册表格,并将其发送到 ietf-types@iana.org。

To: ietf-types@iana.org
Subject: Registration of MIME media type XXX/YYY

MIME media type name:
MIME subtype name:
Required parameters:
Optional parameters:
Encoding considerations:
Security considerations: 
Interoperability considerations: 
Published specification:
Applications which use this media type: 
Additional information:
  Magic number(s):
  File extension(s):
  Macintosh File Type Code(s):
Person & email address to contact for further information: 
Intended usage:
(One of COMMON, LIMITED USE or OBSOLETE)
Author/Change controller:
(Any other information that the author deems interesting may be added below this line.)

5. MIME媒体类型注册

可以通过 IANA 的网站(http://www.iana.org)访问那些已提交的表格。实际存储 MIME 媒体类型的数据库位于 http://www.isi.edu/in-notes/iana/assignments/media-types/ 的 ISI Web 服务器上。
媒体类型存储在一棵目录树中,以主类型和子类型进行结构划分,每种媒体类型都有一个叶子文件。每个文件中都包含了电子邮件提交信息。但是,每个人所完成的注册模板都略有不同,因此,不同人提交的信息质量和格式都有所不同。


本文由【waitig】发表在等英博客
本文固定链接:1.2.1 Web 资源——媒体类型(MIME)
欢迎关注本站官方公众号,每日都有干货分享!
等英博客官方公众号
点赞 (0)分享 (0)