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。)