Cloudflare 的 DNS over HTTPS 端点也支持使用 JSON 格式来查询 DNS 数据。互联网工程任务组 (IETF) 中还没有达成共识的 DNS over HTTPS JSON 模式,因此 Cloudflare 选择遵循与 Google 的 DNS over HTTPS 解析器相同的模式。
JSON 格式的查询是通过 GET 请求发送的。当使用 GET 发起请求时,DNS 查询将被编码到 URL 中。包含一个带有 MIME 类型为 application/dns-json 的 HTTP Accept 请求标头,以指示客户端可以接受 JSON 响应。
| 字段 | 是否必填? | 描述 | 默认值 |
|---|---|---|---|
name |
是 | 查询名称。 | - |
type |
否 | 查询类型(可以是数值或文本 ↗)。 | A |
do |
否 | DO 位 - 客户端是否需要 DNSSEC 数据(留空,或为 0、false、1、true 之一)。 |
false |
cd |
否 | CD 位 - 禁用验证(留空,或为 0、false、1、true 之一)。 |
false |
请求和响应示例:
curl --header "accept: application/dns-json" "https://cloudflare-dns.com/dns-query?name=example.com&type=AAAA"{
"Status": 0,
"TC": false,
"RD": true,
"RA": true,
"AD": true,
"CD": false,
"Question": [
{
"name": "example.com.",
"type": 28
}
],
"Answer": [
{
"name": "example.com.",
"type": 28,
"TTL": 1726,
"data": "2606:2800:220:1:248:1893:25c8:1946"
}
]
}在请求无效的情况下,会返回 400 Bad Request 错误:
curl --header "accept: application/dns-json" "https://cloudflare-dns.com/dns-query?name=example.com&cd=2"{
"error": "Invalid CD flag `2`. Expected to be empty or one of `0`, `false`, `1`, or `true`."
}以下表格提供了有关每个响应字段的更多信息。
| 字段 | 描述 |
|---|---|
Status |
DNS 查询的响应代码。代码定义在:https://www.iana.org/assignments/dns-parameters/dns-parameters.xhtml#dns-parameters-6 ↗。 |
TC |
如果 TC 字段为 true,则设置了截断位。这发生在 DNS 应答超出单个 UDP 或 TCP 数据包大小的情况。使用 Cloudflare DNS over HTTPS 时,TC 字段几乎总是为 false,因为 Cloudflare 支持最大响应大小。 |
RD |
如果为 true,表示设置了“期望递归” (Recursive Desired) 位。在 Cloudflare DNS over HTTPS 中,该值始终设置为 true。 |
RA |
如果为 true,表示设置了“递归可用” (Recursion Available) 位。在 Cloudflare DNS over HTTPS 中,该值始终设置为 true。 |
AD |
如果为 true,表示应答中的每条记录都已通过 DNSSEC 验证。 |
CD |
如果为 true,表示客户端要求禁用 DNSSEC 验证。在这种情况下,Cloudflare 仍会提取与 DNSSEC 相关的记录,但不会尝试验证这些记录。 |
Question: name |
请求的记录名称。 |
Question: type |
请求的 DNS 记录类型。这些类型定义在:https://www.iana.org/assignments/dns-parameters/dns-parameters.xhtml#dns-parameters-4 ↗。 |
Answer: name |
记录所有者。 |
Answer: type |
DNS 记录的类型。这些类型定义在:https://www.iana.org/assignments/dns-parameters/dns-parameters.xhtml#dns-parameters-4 ↗。 |
Answer: TTL |
在认为答案陈旧之前,可以在缓存中存储该答案的秒数。 |
Answer: data |
给定名称和类型的 DNS 记录的值。对于标准化记录类型,数据将为文本格式;对于未知类型,数据将为十六进制。 |
Authority: name |
记录所有者。 |
Authority: type |
DNS 记录的类型。这些类型定义在:https://www.iana.org/assignments/dns-parameters/dns-parameters.xhtml#dns-parameters-4 ↗。 |
Authority: TTL |
在认为答案陈旧之前,可以在缓存中存储该答案的秒数。 |
Authority: data |
给定名称和类型的 DNS 记录的值。对于标准化记录类型,数据将为文本格式;对于未知类型,数据将为十六进制。 |
Additional: name |
记录所有者。 |
Additional: type |
DNS 记录的类型。这些类型定义在:https://www.iana.org/assignments/dns-parameters/dns-parameters.xhtml#dns-parameters-4 ↗。 |
Additional: TTL |
在认为答案陈旧之前,可以在缓存中存储该答案的秒数。 |
Additional: data |
给定名称和类型的 DNS 记录的值。对于标准化记录类型,数据将为文本格式;对于未知类型,数据将为十六进制。 |
Comment |
EDE 消息列表。有关更多信息,请参阅扩展 DNS 错误代码。 |
| 字段 | 描述 |
|---|---|
error |
对所发生错误的说明。 |