Skip to main content

2. Definitions, Conventions, and Generic BNF Grammar (定义、约定和通用BNF语法)

虽然本文档集中指定的所有机制都用散文描述, 但大多数也使用RFC 822的增强BNF表示法正式描述. 实现者需要熟悉这种表示法才能理解本文档集, 并被引导至RFC 822以获得增强BNF表示法的完整说明.

本文档集中的一些增强BNF对RFC 822中定义的语法规则进行了命名引用. 因此, 完整的正式语法是通过将本文档集中每个文档中收集的语法附录与RFC 822的BNF加上RFC 1123中定义的对RFC 822的修改 (特别是更改了returndatemailbox的语法) 相结合而获得的.

本文档集中的所有数值和八位字节值都以十进制表示法给出. 所有已定义的媒体类型值、子类型值和参数名称都不区分大小写. 但是, 除非为特定参数另有规定, 否则参数值区分大小写.

格式注释: 像这样的注释提供了额外的非必要信息, 读者可以跳过这些信息而不会遗漏任何基本内容. 这些非必要注释的主要目的是传达有关本文档集理由的信息, 或将这些文档置于适当的历史或演变背景中. 特别是, 完全专注于构建符合要求的实现的人可以跳过这些信息, 但对于那些希望了解为什么做出某些设计选择的人来说, 这些信息可能有用.

2.1. CRLF

在本文档集中, 术语CRLF指对应于两个US-ASCII字符CR (十进制值13) 和LF (十进制值10) 的八位字节序列, 这两个字符按此顺序一起表示RFC 822邮件中的换行符.

2.2. Character Set (字符集)

术语"字符集" (character set) 在MIME中用于指代将八位字节序列转换为字符序列的方法. 请注意, 不需要在另一个方向上无条件和明确的转换, 因为并非所有字符都可以由给定的字符集表示, 并且字符集可以提供多个八位字节序列来表示特定的字符序列.

此定义旨在允许将各种类型的字符编码用作字符集, 从简单的单表映射 (如US-ASCII) 到复杂的表切换方法 (如使用ISO 2022技术的方法). 但是, 与MIME字符集名称相关联的定义必须完全指定要执行的映射. 特别是, 不允许使用外部配置文件信息来确定确切的映射.

注释: 术语"字符集"最初用于描述诸如US-ASCII和ISO-8859-1之类的简单方案, 这些方案具有从单个八位字节到单个字符的简单一对一映射. 多八位字节编码字符集和切换技术使情况变得更加复杂. 例如, 一些社区使用术语"字符编码" (character encoding) 来表示MIME所称的"字符集", 而使用短语"编码字符集" (coded character set) 来表示从整数 (而不是八位字节) 到字符的抽象映射.

2.3. Message (消息)

术语"消息" (message), 当未进一步限定时, 指在网络上传输的 (完整或"顶级") RFC 822消息, 或封装在类型为"message/rfc822"或"message/partial"的正文中的消息.

2.4. Entity (实体)

术语"实体" (entity), 特指MIME定义的头部字段以及消息或多部分实体正文中某个部分的内容. 此类实体的规范是MIME的本质. 由于实体的内容通常被称为"正文" (body), 因此谈论实体的正文是有意义的. 任何类型的字段都可以出现在实体的头部中, 但只有名称以"content-"开头的那些字段实际上具有任何MIME相关含义. 请注意, 这意味着它们根本没有含义——同时也是消息的实体具有非MIME头部字段, 其含义由RFC 822定义.

2.5. Body Part (正文部分)

术语"正文部分" (body part) 指多部分实体内的实体.

2.6. Body (正文)

术语"正文" (body), 当未进一步限定时, 指实体的正文, 即消息或正文部分的正文.

注释: 前面的四个定义显然是循环的. 这是不可避免的, 因为MIME消息的整体结构确实是递归的.

2.7. 7bit Data (7位数据)

"7位数据" (7bit data) 指所有表示为相对较短的行的数据, CRLF行分隔序列之间有998个八位字节或更少 [RFC-821]. 不允许十进制值大于127的八位字节, 也不允许NUL (十进制值为0的八位字节). CR (十进制值13) 和LF (十进制值10) 八位字节仅作为CRLF行分隔序列的一部分出现.

2.8. 8bit Data (8位数据)

"8位数据" (8bit data) 指所有表示为相对较短的行的数据, CRLF行分隔序列之间有998个八位字节或更少 [RFC-821], 但可以使用十进制值大于127的八位字节. 与"7位数据"一样, CR和LF八位字节仅作为CRLF行分隔序列的一部分出现, 并且不允许NUL.

2.9. Binary Data (二进制数据)

"二进制数据" (binary data) 指允许任何八位字节序列的数据.

2.10. Lines (行)

"行" (lines) 定义为由CRLF序列分隔的八位字节序列. 这与RFC 821和RFC 822都一致. "行"仅指消息中的数据单元, 它可能对应于也可能不对应于用户代理实际显示的内容.


术语总结:

术语英文说明
字符集Character Set八位字节序列到字符序列的转换方法
消息MessageRFC 822消息或封装的消息
实体EntityMIME头部字段和内容
正文部分Body Part多部分实体内的实体
正文Body实体的内容
7位数据7bit Data仅US-ASCII, 无高位字节, 短行
8位数据8bit Data允许高位字节, 短行
二进制数据Binary Data任意八位字节序列
LinesCRLF分隔的八位字节序列

关键概念:

  • MIME结构是递归的 (实体可以包含实体)
  • 参数名称不区分大小写, 但参数值通常区分大小写
  • CRLF是行分隔符的唯一形式
  • 数据分为7bit、8bit和binary三种类型