Skip to main content

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)同MUSTREQUIRED支持标准字母表
SHALL应当 (SHALL)同MUST解码器SHALL拒绝非法字符
SHALL NOT不应当 (SHALL NOT)同MUST NOT编码器SHALL NOT使用非标准字符

推荐性建议

关键词中文含义示例
SHOULD应该 (SHOULD)强烈推荐,但可能有例外实现SHOULD验证填充
SHOULD NOT不应该 (SHOULD NOT)强烈不推荐,但可能有例外实现SHOULD NOT忽略错误
RECOMMENDED推荐 (RECOMMENDED)同SHOULDRECOMMENDED使用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 (更新版)