D.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
D.2.1 离散类型
MIME 类型可以直接用于描述对象类型,也可以用于描述其他对象类型的集合或类型包。如果直接用 MIME 类型来描述某个对象类型,它就是一种离散类型(discrete type)。其中包括文本文件、视频和应用程序特有的文件格式。
D.2.2 复合类型
如果 MIME 类型描述的是其他内容的集合或封装包,这种 MIME 类型就被称为复合类型(composite type)。复合类型描述的是封装包的格式。将封装包打开时,其中包含的每个对象都会有其各自的类型。
D.2.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--
D.2.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 := "(" | ")" | "<" | ">" | "@" |
"," | ";" | ":" | "\" | <"> |
"/" | "[" | "]" | "?" | "="