2. Definitions, Conventions, and Generic BNF Grammar (定义、约定和通用BNF语法)
虽然本文档集中指定的所有机制都用散文描述, 但大多数也使用RFC 822的增强BNF表示法正式描述. 实现者需要熟悉这种表示法才能理解本文档集, 并被引导至RFC 822以获得增强BNF表示法的完整说明.
本文档集中的一些增强BNF对RFC 822中定义的语法规则进行了命名引用. 因此, 完整的正式语法是通过将本文档集中每个文档中收集的语法附录与RFC 822的BNF加上RFC 1123中定义的对RFC 822的修改 (特别是更改了return、date和mailbox的语法) 相结合而获得的.
本文档集中的所有数值和八位字节值都以十进制表示法给出. 所有已定义的媒体类型值、子类型值和参数名称都不区分大小写. 但是, 除非为特定参数另有规定, 否则参数值区分大小写.
格式注释: 像这样的注释提供了额外的非必要信息, 读者可以跳过这些信息而不会遗漏任何基本内容. 这些非必要注释的主要目的是传达有关本文档集理由的信息, 或将这些文档置于适当的历史或演变背景中. 特别是, 完全专注于构建符合要求的实现的人可以跳过这些信息, 但对于那些希望了解为什么做出某些设计选择的人来说, 这些信息可能有用.
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 | 八位字节序列到字符序列的转换方法 |
| 消息 | Message | RFC 822消息或封装的消息 |
| 实体 | Entity | MIME头部字段和内容 |
| 正文部分 | Body Part | 多部分实体内的实体 |
| 正文 | Body | 实体的内容 |
| 7位数据 | 7bit Data | 仅US-ASCII, 无高位字节, 短行 |
| 8位数据 | 8bit Data | 允许高位字节, 短行 |
| 二进制数据 | Binary Data | 任意八位字节序列 |
| 行 | Lines | CRLF分隔的八位字节序列 |
关键概念:
- MIME结构是递归的 (实体可以包含实体)
- 参数名称不区分大小写, 但参数值通常区分大小写
- CRLF是行分隔符的唯一形式
- 数据分为7bit、8bit和binary三种类型