8. ServiceMode RR 兼容性和强制密钥
在 ServiceMode RR 中,如果客户端忽略某个 SvcParamKey 会导致 RR 无法正常工作,则该 SvcParamKey 被视为"强制的".每个 SVCB 协议映射应该指定一组"自动强制"的密钥,即如果这些密钥出现在 RR 中则为强制的.SvcParamKey "mandatory" 用于指示该 RR 的任何强制密钥,这些密钥是对已存在的任何自动强制密钥的补充.
如果客户端识别所有强制密钥,并且它们的值表明成功建立连接是可能的,则客户端会认为 ServiceMode RR 是"兼容的".不兼容的 RR 将被忽略(参见第 3 节中定义的过程的第 5 步).
表示值应该是一个或多个有效 SvcParamKey 的逗号分隔列表,可以使用其注册名称或未知密钥格式(第 2.1 节).密钥可以以任何顺序出现,但不得出现多次.为了自洽性(第 2.4.3 节),列出的密钥也必须出现在 SvcParams 中.
为了实现更简单的解析,此 SvcParamValue 不得包含转义序列.
线格式值是每个密钥数值按网络字节序的串联,不含任何内部填充.
例如,具有密钥 alpn、port 和假设的新密钥 foo(SvcParamKey=54321)的 ServiceMode RR,在表示格式中的 mandatory 值为 "mandatory=alpn,port,foo".在线格式中,这将表示为以下八位字节:
00 01 00 03 d4 31
(在上面的示例中,"00 01" 表示 "alpn" 的数值,"00 03" 表示 "port" 的数值,"d4 31" 表示网络字节序的数值 54321.)