2. Conventions Used in This Document (本文档使用的约定)
本文档中的关键词"MUST"、"MUST NOT"、"REQUIRED"、"SHALL"、"SHALL NOT"、"SHOULD"、"SHOULD NOT"、"RECOMMENDED"、"MAY"和"OPTIONAL"应按照 [RFC 2119] 中的描述进行解释。
RFC 2119关键词解释
根据RFC 2119,这些关键词在本规范中具有特定含义:
强制性要求
| 关键词 | 中文 | 含义 | 示例 |
|---|---|---|---|
| MUST | 必须 (MUST) | 绝对要求 | 实现MUST包含填充字符 |
| MUST NOT | 禁止 (MUST NOT) | 绝对禁止 | 实现MUST NOT添加换行符 |
| REQUIRED | 要求 (REQUIRED) | 同MUST | REQUIRED支持标准字母表 |
| SHALL | 应当 (SHALL) | 同MUST | 解码器SHALL拒绝非法字符 |
| SHALL NOT | 不应当 (SHALL NOT) | 同MUST NOT | 编码器SHALL NOT使用非标准字符 |
推荐性建议
| 关键词 | 中文 | 含义 | 示例 |
|---|---|---|---|
| SHOULD | 应该 (SHOULD) | 强烈推荐,但可能有例外 | 实现SHOULD验证填充 |
| SHOULD NOT | 不应该 (SHOULD NOT) | 强烈不推荐,但可能有例外 | 实现SHOULD NOT忽略错误 |
| RECOMMENDED | 推荐 (RECOMMENDED) | 同SHOULD | RECOMMENDED使用URL安全字母表 |
可选性
| 关键词 | 中文 | 含义 | 示例 |
|---|---|---|---|
| MAY | 可以 (MAY) | 真正可选 | 实现MAY支持无填充模式 |
| OPTIONAL | 可选 (OPTIONAL) | 同MAY | 换行支持是OPTIONAL的 |
在Base编码规范中的应用
MUST (必须) 的使用
示例1: 填充要求
"Implementations MUST include appropriate pad characters
at the end of encoded data."
实现必须 (MUST) 在编码数据末尾包含适当的填充字符。
违反后果: ❌ 解码失败,数据损坏
示例2: 非法字符处理
"Implementations MUST reject the encoded data if it
contains characters outside the base alphabet."
实现必须 (MUST) 拒绝包含字母表之外字符的编码数据。
违反后果: ❌ 安全漏洞,数据损坏
SHOULD (应该) 的使用
示例: 错误报告
"Implementations SHOULD provide clear error messages
when decoding fails."
实现应该 (SHOULD) 在解码失败时提供清晰的错误消息。
可以不遵守的情况:
- 嵌入式系统资源受限
- 性能关键场景
MAY (可以) 的使用
示例: 可选功能
"Implementations MAY support decoding of data without
padding characters."
实现可以 (MAY) 支持解码无填充字符的数据。
含义: 这是真正可选的功能,实现可以选择支持或不支持。
实际应用指南
对于实现者
遵守优先级:
1. MUST/MUST NOT/REQUIRED/SHALL/SHALL NOT
→ 必须严格遵守,否则不合规
2. SHOULD/SHOULD NOT/RECOMMENDED
→ 强烈推荐遵守,除非有充分理由
3. MAY/OPTIONAL
→ 根据需求自行决定
对于测试者
测试重点:
✅ 验证所有MUST要求
✅ 检查SHOULD建议的实现情况
⚠️ 记录MAY功能的支持状态
对于用户
选择实现时:
1. 确保实现满足所有MUST要求
2. 优先选择实现SHOULD建议的实现
3. 根据需求选择MAY功能的支持
常见误解
❌ 错误理解
误解1: "SHOULD可以忽略"
✗ 错误: SHOULD只是建议,可以随意不遵守
✓ 正确: SHOULD是强烈推荐,只有在充分理由下才能不遵守
误解2: "MAY就是可选功能"
✗ 错误: MAY功能不重要
✓ 正确: MAY功能是可选的,但如果实现了就必须正确实现
误解3: "MUST只是建议"
✗ 错误: MUST可以在某些情况下不遵守
✓ 正确: MUST是绝对要求,必须严格遵守
本规范中的关键要求预览
在后续章节中,你会看到这些关键要求:
第3.1节:
"Implementations MUST NOT add line feeds to base-encoded
data unless..."
第3.2节:
"Implementations MUST include appropriate pad characters..."
第3.3节:
"Implementations MUST reject the encoded data if it
contains characters outside the base alphabet..."
这些要求使用MUST,表示它们是绝对强制的,所有符合规范的实现都必须遵守。
参考
- RFC 2119 - Key words for use in RFCs to Indicate Requirement Levels
- RFC 8174 - Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words (更新版)