前言
在现代 iOS 应用中,为了确保 DNS 查询的隐私和完整性,我们可以使用 DoH(DNS over HTTPS) 来查询域名信息。
本文将以 https://cloudflare-dns.com/dns-query?name=core.tantanapp.com&type=A
为例,通过 Postman 发起一次标准的 DoH GET 请求,完整解析请求与响应内容,并深入讲解相关概念,比如:
type=A
的含义- 响应中
TTL
的作用 - 结果如何理解
- 代码+注释逐行讲解
- 插图帮助理解域名解析跳转流程
请求分析
在 Postman 中,你发送了如下请求:
http
GET https://cloudflare-dns.com/dns-query?name=core.tantanapp.com&type=A
Accept: application/dns-json
请求参数详解:
参数 | 说明 |
---|---|
name |
要查询的域名(这里是 core.tantanapp.com ) |
type=A |
查询类型是 A 记录(即获取 IPv4 地址) |
Accept |
请求头部,告诉服务器返回 JSON 格式的 DNS 响应 |
什么是 type=A
?
在 DNS 协议中,每个查询都有一个 "Type",指明你想要查询什么类型的资源。
Type | 含义 |
---|---|
A |
查询域名对应的 IPv4 地址 |
AAAA |
查询域名对应的 IPv6 地址 |
CNAME |
查询域名的别名记录 |
MX |
查询邮件服务器记录 |
TXT |
查询文本信息记录 |
在这里,type=A
意味着我们想要查找 core.tantanapp.com
的 IPv4 地址,即标准的访问 IP 地址。
✅ 这通常是 Web App、移动 App 访问服务器最常见的查询类型。
响应内容分析
服务器返回了以下 JSON 数据(已格式化并加注释):
json
{
"Status": 0, // 0 表示查询成功
"TC": false, // TC = Truncated, 没有被截断
"RD": true, // RD = Recursion Desired, 允许递归查询
"RA": true, // RA = Recursion Available, 服务器支持递归查询
"AD": false, // AD = Authenticated Data, 响应未使用 DNSSEC 验证
"CD": false, // CD = Checking Disabled, 检查未禁用
"Question": [
{
"name": "core.tantanapp.com",
"type": 1 // 1 = A记录
}
],
"Answer": [
{
"name": "core.tantanapp.com",
"type": 5, // 5 = CNAME(别名)
"TTL": 67, // 生存时间,秒
"data": "core.cf.vip.tantanapp.com."
},
{
"name": "core.cf.vip.tantanapp.com",
"type": 5,
"TTL": 67,
"data": "core.tantanapp.com.cdn.cloudflare.net."
},
{
"name": "core.tantanapp.com.cdn.cloudflare.net",
"type": 1,
"TTL": 247,
"data": "104.18.11.175"
},
{
"name": "core.tantanapp.com.cdn.cloudflare.net",
"type": 1,
"TTL": 247,
"data": "104.18.10.175"
}
]
}
响应字段重点解释
1. Status = 0
0
表示查询成功。- 如果返回其他值,比如
3
(Name Error),就表示域名不存在。
2. Answer 数组
DNS 查询的最终结果都在 Answer
中。
第一条记录:
name
:core.tantanapp.com
type: 5
→ 表示是 CNAME(别名)记录data
:core.cf.vip.tantanapp.com.
👉 说明 core.tantanapp.com
并没有直接绑定 IP,而是指向了 core.cf.vip.tantanapp.com
。
第二条记录:
name
:core.cf.vip.tantanapp.com
type: 5
→ 再次是 CNAME(别名)data
:core.tantanapp.com.cdn.cloudflare.net
👉 继续跳转,最终指向 Cloudflare 的 CDN 域名。
第三、四条记录:
name
:core.tantanapp.com.cdn.cloudflare.net
type: 1
→ 这才是最终的 A 记录data
:104.18.11.175
和104.18.10.175
👉 终于拿到最终的服务器 IPv4 地址!
什么是 TTL?
每条记录里都有一个 TTL
字段,比如 67
秒 或 247
秒。
- TTL(Time To Live) 表示这条 DNS 记录在缓存中可以保存多久(单位:秒)。
- 过期后客户端必须重新查询 DNS,获取最新的 IP 地址。
📌 举例:
如果 TTL = 67
,表示 67 秒内你都可以直接使用缓存 IP,不用再次请求 DNS 服务器。
这可以显著减少延迟和服务器压力,同时在 IP 改变时能够及时刷新。
整体解析跳转流程图
为了更直观理解,我们用一个简单流程图总结整个解析过程:
[core.tantanapp.com]
↓ (CNAME)
[core.cf.vip.tantanapp.com]
↓ (CNAME)
[core.tantanapp.com.cdn.cloudflare.net]
↓ (A记录)
[104.18.11.175] 和 [104.18.10.175]
小结
通过本次 Postman 测试,我们清楚了解了:
项目 | 内容 |
---|---|
查询类型 | A ,查询域名对应的 IPv4 地址 |
返回数据 | 包含多层 CNAME 跳转,最终指向真实 IP |
TTL | 每条记录缓存的有效时间(秒) |
使用场景 | 验证 App 的请求路径、抵御 DNS 劫持、缓存优化 |
掌握这种查询和解析流程,对于网络安全、性能优化和网络故障排查,都是非常实用的技能!
