34 lines
1.8 KiB
Markdown
34 lines
1.8 KiB
Markdown
域名备案号查询时,如果对一个完整的域名(例如:`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`)确定一个最终的备案号。
|
||
|
||
逻辑是遍历子域名列表,根据子域名在备案信息映射中是否存在,选取对应的备案号。代码逻辑如下:
|
||
|
||
```java
|
||
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)。
|