D.2 MIME类型结构

每种 MIME 媒体类型都包含类型、子类型和可选参数的列表。类型和子类型由一个斜杠分隔,如果有可选参数的话,则以分号开始。在 HTTP 中,MIME 媒体类型被广泛用于 Content-TypeAccept 首部。下面是几个例子:

  1. Content-Type: video/quicktime
  2. Content-Type: text/html; charset="iso-8859-6"
  3. Content-Type: multipart/mixed; boundary=gc0p4Jq0M2Yt08j34c0p
  4. Accept: image/gif

D.2.1 离散类型

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

D.2.2 复合类型

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

D.2.3 多部分类型

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

  1. Content-Type: multipart/mixed; boundary=unique-boundary-1
  2.  
  3. --unique-boundary-1
  4. Content-type: text/plain; charset=US-ASCII
  5.  
  6. Hi there, I'm some boring ASCII text...
  7.  
  8. --unique-boundary-1
  9. Content-Type: multipart/parallel; boundary=unique-boundary-2
  10.  
  11. --unique-boundary-2
  12. Content-Type: audio/basic
  13.  
  14. ... 8000 Hz single-channel mu-law-format
  15. audio data goes here ...
  16.  
  17. --unique-boundary-2
  18. Content-Type: image/jpeg
  19.  
  20. ... image data goes here ...
  21.  
  22. --unique-boundary-2--
  23.  
  24. --unique-boundary-1
  25. Content-type: text/enriched
  26.  
  27. This is <bold><italic>enriched.</italic></bold>
  28. <smaller>as defined in RFC 1896</smaller>
  29.  
  30. Isn't it <bigger><bigger>cool?</bigger></bigger>
  31.  
  32. --unique-boundary-1
  33. Content-Type: message/rfc822
  34.  
  35. From: (mailbox in US-ASCII)
  36. To: (address in US-ASCII)
  37. Subject: (subject in US-ASCII)
  38. Content-Type: Text/plain; charset=ISO-8859-1
  39. Content-Transfer-Encoding: Quoted-printable
  40.  
  41. ... Additional text in ISO-8859-1 goes here ...
  42.  
  43. --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 定义的语法如下所示:

  1. TYPE := "application" | "audio" | "image" | "message" | "multipart" |
  2. "text" | "video" | IETF-TOKEN | X-TOKEN
  3. SUBTYPE := IANA-SUBTOKEN | IETF-TOKEN | X-TOKEN
  4. IETF-TOKEN := <extension token with RFC and registered with IANA>
  5. IANA-SUBTOKEN := <extension token registered with IANA>
  6. X-TOKEN := <"X-" or "x-" prefix, followed by any token>
  7. PARAMETER := TOKEN "=" VALUE
  8. VALUE := TOKEN / QUOTED-STRING
  9. TOKEN := 1*<any (US-ASCII) CHAR except SPACE, CTLs, or TSPECIALS>
  10. TSPECIALS := "(" | ")" | "<" | ">" | "@" |
  11. "," | ";" | ":" | "\" | <"> |
  12. "/" | "[" | "]" | "?" | "="