跳到主要内容

2. 本文档使用的约定

本文档中的关键词 "MUST"(必须)、"MUST NOT"(禁止)、"REQUIRED"(要求)、"SHALL"(应)、"SHALL NOT"(不应)、"SHOULD"(应该)、"SHOULD NOT"(不应该)、"RECOMMENDED"(推荐)、"MAY"(可以)和 "OPTIONAL"(可选)应按照 [RFC 2119] 中的描述进行解释。


RFC 2119 关键词解释​

根据 RFC 2119,这些关键词在本规范中具有以下特定含义:

强制性要求​

关键词含义示例
MUST绝对要求实现必须包含填充字符
MUST NOT绝对禁止实现不得添加换行符
REQUIRED等同于 MUST要求支持标准字母表
SHALL等同于 MUST解码器应拒绝非法字符
SHALL NOT等同于 MUST NOT编码器不应使用非标准字符

推荐性要求​

关键词含义示例
SHOULD强烈推荐,但允许例外实现应校验填充
SHOULD NOT强烈不推荐,但允许例外实现不应忽略错误
RECOMMENDED等同于 SHOULD推荐使用 URL 安全字母表

可选性​

关键词含义示例
MAY真正可选实现可以支持无填充模式
OPTIONAL等同于 MAY换行符支持是可选的

在基数编码规范中的应用​

MUST 的使用​

示例 1:填充要求
"实现必须在编码数据的末尾包含适当的填充字符。"

违反后果:❌ 解码失败、数据损坏
示例 2:非法字符处理
"如果编码数据包含不属于基数字母表的字符,
实现必须拒绝该数据。"

违反后果:❌ 安全漏洞、数据损坏

SHOULD 的使用​

示例:错误报告
"当解码失败时,实现应提供清晰的错误信息。"

可接受的未遵从情形:
- 资源受限的嵌入式系统
- 性能关键的场景

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 节:
"实现不得向基数编码数据添加换行符,除非……"

第 3.2 节:
"实现必须在编码数据末尾包含适当的填充字符……"

第 3.3 节:
"如果编码数据包含不属于基数字母表的字符,
实现必须拒绝该数据……"

这些要求使用了 MUST,表明它们是绝对强制的,所有合规实现都必须遵守。


参考文献​

  • RFC 2119 - 用于 RFC 中表示需求等级的关键词
  • RFC 8174 - RFC 2119 关键词中大小写歧义(更新版本)