1.8 KiB
1.8 KiB
域名备案号查询时,如果对一个完整的域名(例如:cdn.jiangsu.chinatax.gov.cn)无法直接获取备案信息,会将其拆分为子域名列表进行逐级查询。例如:
- 原始域名:
cdn.jiangsu.chinatax.gov.cn - 切割后的子域名列表:
["jiangsu.chinatax.gov.cn", "chinatax.gov.cn"]
通过对这些子域名一次性全部查询备案信息,得到一个备案信息映射:
{
"chinatax.gov.cn": "true_京ICP备13021685号-2",
"jiangsu.chinatax.gov.cn": "true_苏ICP备05002258号-2"
}
最后为原始域名(cdn.jiangsu.chinatax.gov.cn)确定一个最终的备案号。
逻辑是遍历子域名列表,根据子域名在备案信息映射中是否存在,选取对应的备案号。代码逻辑如下:
subDomainMap.forEach((key, subs) -> subs.forEach(sub -> {
if (domainsICP.containsKey(sub)) {
result.put(key, domainsICP.get(sub));
}
}));
这里 subDomainMap 存储的是原始域名和其对应的子域名列表的映射,例如 { "cdn.jiangsu.chinatax.gov.cn": ["jiangsu.chinatax.gov.cn", "chinatax.gov.cn"] },domainsICP 是备案信息映射,result 用于存储最终的备案号结果。
代码逻辑中,子域名列表 ["jiangsu.chinatax.gov.cn", "chinatax.gov.cn"] 是按照从长到短的顺序遍历的。由于 result.put(key, value) 会覆盖之前的值,最终结果总是会被列表中最后一个匹配到的子域名的备案号覆盖。
- 第一次循环,
sub为jiangsu.chinatax.gov.cn,找到备案号true_苏ICP备05002258号-2,存储到result中。 - 第二次循环,
sub为chinatax.gov.cn,也找到备案号true_京ICP备13021685号-2,会覆盖掉之前的值。 - 同理如果
chinatax.gov.cn为false那么最终cdn.jiangsu.chinatax.gov.cn也会被覆盖为未备案(false)。