MIME类型
声明:【目前未整理完,待更新…】
以下为资料参考
《HTTP权威指南》
《HTTP RFC规范》
MIME 媒体类型(简称为 MIME 类型) 是描述报文实体主体内容的一些标准化名称
( 比如, text/html、 image/jpeg)。 本附录说明了 MIME 类型是怎样工作的、 如何注
册新的名字以及到哪里去查找更多的相关信息。
本附录还包含了 10 张便捷表格, 详细描述了从全球众多资源中搜集来的数百种
MIME 类型。 这可能是有史以来最详细的 MIME 类型列表。 希望这些表格会对你有所
帮助。
此附录的主要内容有:
• 在 D.1 节列出主要的参考资料;
• 在 D.2 节解释 MIME 类型的结构;
• 在 D.3 节说明了如何注册 MIME 类型;
• 附加的 10 张表格让你更便捷地查找 MIME 类型。
本附录包含了下列 MIME 类型表:
• application/*——表 D-3
• audio/*——表 D-4
• chemical/*——表 D-5
• image/*——表 D-6
• message/*——表 D-7
• model/*——表 D-8
• multipart/*——表 D-9
• text/*——表 D-10
• video/*——表 D-11
• 其他——表 D-12
一、 背景知识
MIME 类型最初是为多媒体电子邮件而开发的, 但目前在 HTTP 和其他几种需要描
述数据对象格式和用途的协议中也使用了 MIME 类型。
- RFC 2045, “MIME: Format of Internet Message Bodies”(“MIME: 因特网报文
主体的格式”)
描述了 MIME 报文结构的概况, 并介绍了 HTTP 借用的 Content-Type 首部。
【链接地址】: https://tools.ietf.org/html/rfc2405
- RFC 2046, “MIME: Media Types”(“MIME: 媒体类型”)
介绍了 MIME 类型及其结构。
【链接地址】: https://tools.ietf.org/html/rfc2406
- RFC 2047, “MIME: Message Header Extensions for Non-ASCII Text”(“MIME:
非 ASCII 文本的报文首部扩展”)
定义了一些在首部包含非 ASCII 字符的方式。
【链接地址】: https://tools.ietf.org/html/rfc2407
- RFC 2048, “MIME: Registration Procedures”(“MIME: 注册过程”)
定义了如何向因特网号码分配机构(“Internet Assigned Numbers Authority, IANA”) 注册 MIME 值。
【链接地址】: https://tools.ietf.org/html/rfc2408
- RFC 2049,“MIME: Conformance Criteria and Examples”(“MIME: 一致性标准及实例”)
详细介绍了一致性规则, 并提供了一些实例。
【链接地址】: https://tools.ietf.org/html/rfc2409
二、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-” 开头的) 实
验性标记。 表 D-1 列出了一些常见的主类型。
表D-1 常见的主MIME类型
类型 | 描述 |
---|---|
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 := "(" | ")" | "<" | ">" | "@" |
"," | ";" | ":" | "\" | <"> |
"/" | "[" | "]" | "?" | "="
上一篇: Java中线程的等待与唤醒_动力节点Java学院整理
下一篇: 小程序JS的几个小知识