Files
2026-03-01 01:43:46 +08:00

1.8 KiB
Raw Permalink Blame History

域名备案号查询时,如果对一个完整的域名(例如: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) 会覆盖之前的值,最终结果总是会被列表中最后一个匹配到的子域名的备案号覆盖。

  • 第一次循环,subjiangsu.chinatax.gov.cn,找到备案号 true_苏ICP备05002258号-2,存储到 result 中。
  • 第二次循环,subchinatax.gov.cn,也找到备案号 true_京ICP备13021685号-2,会覆盖掉之前的值。
  • 同理如果 chinatax.gov.cnfalse 那么最终 cdn.jiangsu.chinatax.gov.cn 也会被覆盖为未备案(false)。