2. 规则
当迭代式缓存 DNS 解析器收到 NXDOMAIN 响应时, 它应当 (SHOULD) 将该响应存入缓存, 随后位于该节点及其下方的所有名称和资源记录集 (Resource Record Set, RRset) 应当 (SHOULD) 被视为不可到达. 对这些名称的后续查询应当 (SHOULD) 得到 NXDOMAIN 响应.
但是, 如果解析器在 NXDOMAIN cut 之下已经缓存了数据, 它可以 (MAY) 继续将这些数据作为回复发送 (直到这些缓存数据的 TTL 过期), 因为这可以在收到查询时避免额外处理. 第 6 节对此提供了更多信息.
另一个例外是, 验证型解析器可以 (MAY) 决定仅在 NXDOMAIN 响应已通过 DNSSEC 验证时, 才实现 "NXDOMAIN cut" 行为 (本节第一段所述). 理由见第 7 节.
某个子树不存在这一事实并非永久有效: [RFC2308] 第 3 节已经描述了 NXDOMAIN 响应可以被缓存的时间, 即"否定 TTL (negative TTL)".
如果由于已缓存不存在性而产生的 NXDOMAIN 响应来自 DNSSEC 签名区域, 则它会伴随 NSEC 或 NSEC3 记录, 用于认证该名称不存在. 对原始 NXDOMAIN 名称的后代名称而言, 同一组 NSEC 或 NSEC3 记录可以证明该后代名称不存在. 如果触发查询设置了 DNSSEC OK (DO) 位, 则迭代式缓存解析器必须 (MUST) 在对该触发查询的响应中返回这些 NSEC 或 NSEC3 记录.
警告: 如果存在 CNAME (或 DNAME) 链, 则不存在的名称是该链的最后一个名称 ([RFC6604]), 而不是 QNAME. 缓存中保存的 NXDOMAIN 针对的是被否定名称, 并不总是针对 QNAME.
作为这些规则后果的示例, 考虑解析器针对不存在域 'foo.example' 的两次连续查询: 第一次查询 'foo.example' (结果为 NXDOMAIN), 第二次查询 'bar.foo.example' (结果同样为 NXDOMAIN). 今天许多解析器会转发这两个查询. 然而, 按照本文档中的规则 ("NXDOMAIN cut"), 解析器会缓存第一个 NXDOMAIN 响应作为不存在性的标志, 然后立即为第二个查询返回 NXDOMAIN 响应, 而不会将其发送给权威服务器.
如果第一个请求是针对 'bar.foo.example', 第二个请求是针对 'baz.foo.example', 则第一个 NXDOMAIN 响应不会说明任何关于 'baz.foo.example' 的信息; 因此, 第二个查询会像未使用 "NXDOMAIN cut" 优化之前那样被发送出去 (见附录 A).