過去,網路應用程式需要瀏覽器擴充功能才能使用進階技術 DNS 功能,例如 DANE、DNS-SD 服務探索,或甚至是解析 例如 MX 記錄。 如要使用 DNSSEC 相關功能 (例如 SSHFP 記錄), 因為瀏覽器或作業系統可能沒有驗證 DNSSEC,所以必須自行驗證 DNSSEC。
自 2016 年起,Google 公用 DNS 為 DoH 提供適用於 DNSSEC 的可網頁版 API 驗證不需要瀏覽器或 OS 設定或擴充功能。 簡單的 GET 查詢參數和 JSON 回應可讓用戶端剖析 結果,並且避免使用複雜的 DNS 訊息格式詳細資料,例如 網域名稱的指標壓縮。
如要瞭解 DoH 的相關資訊,請參閱 DoH 說明文件頁面 例如 HTTP 標頭、重新導向處理、隱私權最佳做法和 HTTP 狀態碼。
「安全傳輸」頁面有
DoH 的 curl
指令列範例,以及 DoH 和 DNS over
TLS (DoT),例如 TLS 支援和 DNS 截斷。
JSON API 規格
所有 API 呼叫都是 HTTP GET 要求。 如果參數重複,系統只會採用第一個值。
支援的參數
- 名稱
字串,必要
唯一的必要參數。接受 RFC 4343 反斜線逸出。
- 長度 (取代反斜線逸出後) 必須介於 1 到 1 之間 253 個 (如有選用,則忽略尾隨點)。
- 所有標籤 (點與點之間的名稱部分) 的長度都必須為 1 至 63 個位元組。
- 名稱無效,例如
.example.com
、example..com
或空字串 get 400 不正確的要求。 - 非 ASCII 字元應透過 Puny 編碼 (
xn--qxam
,而非ελ
)。
- 類型
字串,預設值:
1
RR 類型可以是 [1, 65535] 中的數字或標準字串 (不區分大小寫,例如
A
或aaaa
)。 你可以在「任何」中使用255
但請注意,這並非 取代傳送 A、AAAA 或 MX 記錄的查詢。 授權的名稱伺服器不一定能傳回這類查詢的所有記錄; 有些網路沒有回應,有些 (例如 cloudflare.com) 只會傳回 HINFO。- 持續推送軟體更新
布林值,預設:
false
CD (檢查已停用) 旗標。 使用
cd=1
或cd=true
停用 DNSSEC 驗證。 請使用cd=0
、cd=false
或不含cd
參數來啟用 DNSSEC 驗證。- 個
字串,預設:空白
所需的內容類型選項。 使用
ct=application/dns-message
在 回應 HTTP 主體而非 JSON 文字 使用ct=application/x-javascript
明確要求 JSON 文字。 系統會忽略其他內容類型值,並傳回預設的 JSON 內容。- 幫
布林值,預設:
false
DO (DNSSEC OK) 旗標。 使用
do=1
或do=true
納入 DNSSEC 記錄 (RRSIG、NSEC、NSEC3); 使用do=0
、do=false
或不使用do
參數來省略 DNSSEC 記錄。應用程式應一律處理 (並視需要忽略) 任何 DNSSEC 記錄,因為其他實作可能一律會包含這些記錄 我們日後可能會變更 JSON 回應的預設行為。 (二進位檔 DNS 訊息回應一律會遵循 DO 標記的值)。
- edns_client_subnet
字串,預設:空白
edns0-client-subnet 選項。格式是具有子網路遮罩的 IP 位址。 範例:
1.2.3.4/24
、2001:700:300::/48
。如果您因為隱私權疑慮而使用 DNS-over-HTTPS, 將「任何」部分傳送至權威名稱伺服器 如要提高地理位置精確度,請使用
edns_client_subnet=0.0.0.0/0
。 Google 公用 DNS 通常會傳送大概網路資訊 (通常使用零值佔 IPv4 位址的最後一個部分)。- random_padding
字串,已忽略
系統會忽略此參數的值。範例:
XmkMw~o_mgP2pf.gpw-Oi5dK
。API 用戶端擔心可能會透過 HTTPS GET 要求的封包大小就能使用這個引數,藉此發出所有要求 透過隨機資料填充要求來呈現相同大小 為避免網址誤解,請限制邊框間距字元 至未保留網址字元: 大小寫英文字母、數字、連字號、半形句號、底線和波浪號。
JSON 格式的 DNS 回應
成功的回應 (在這裡加入的留言不會出現在實際回應中):
{
"Status": 0, // NOERROR - Standard DNS response code (32 bit integer).
"TC": false, // Whether the response is truncated
"RD": true, // Always true for Google Public DNS
"RA": true, // Always true for Google Public DNS
"AD": false, // Whether all response data was validated with DNSSEC
"CD": false, // Whether the client asked to disable DNSSEC
"Question":
[
{
"name": "apple.com.", // FQDN with trailing dot
"type": 1 // A - Standard DNS RR type
}
],
"Answer":
[
{
"name": "apple.com.", // Always matches name in the Question section
"type": 1, // A - Standard DNS RR type
"TTL": 3599, // Record's time-to-live in seconds
"data": "17.178.96.59" // Data for A - IP address as text
},
{
"name": "apple.com.",
"type": 1,
"TTL": 3599,
"data": "17.172.224.47"
},
{
"name": "apple.com.",
"type": 1,
"TTL": 3599,
"data": "17.142.160.59"
}
],
"edns_client_subnet": "12.34.56.78/0" // IP address / scope prefix-length
}
請參閱 RFC 7871 (EDNS 用戶端子網路) ,進一步瞭解「範圍前置字串-長度」及其對快取的影響。
含有診斷資訊的失敗回應:
{
"Status": 2, // SERVFAIL - Standard DNS response code (32 bit integer).
"TC": false, // Whether the response is truncated
"RD": true, // Always true for Google Public DNS
"RA": true, // Always true for Google Public DNS
"AD": false, // Whether all response data was validated with DNSSEC
"CD": false, // Whether the client asked to disable DNSSEC
"Question":
[
{
"name": "dnssec-failed.org.", // FQDN with trailing dot
"type": 1 // A - Standard DNS RR type
}
],
"Comment": "DNSSEC validation failure. Please check http://dnsviz.net/d/dnssec-failed.org/dnssec/."
}
含有內嵌引號和名稱伺服器歸因的 SPF 和 TXT 記錄:
{
"Status": 0, // NOERROR - Standard DNS response code (32 bit integer).
"TC": false, // Whether the response is truncated
"RD": true, // Always true for Google Public DNS
"RA": true, // Always true for Google Public DNS
"AD": false, // Whether all response data was validated with DNSSEC
"CD": false, // Whether the client asked to disable DNSSEC
"Question": [
{
"name": "*.dns-example.info.", // FQDN with trailing dot
"type": 99 // SPF - Standard DNS RR type
}
],
"Answer": [
{
"name": "*.dns-example.info.", // Always matches name in Question
"type": 99, // SPF - Standard DNS RR type
"TTL": 21599, // Record's time-to-live in seconds
"data": "\"v=spf1 -all\"" // Data for SPF - quoted string
}
],
"Comment": "Response from 216.239.38.110"
// Uncached responses are attributed to the authoritative name server
}
{
"Status": 0, // NOERROR - Standard DNS response code (32 bit integer).
"TC": false, // Whether the response is truncated
"RD": true, // Always true for Google Public DNS
"RA": true, // Always true for Google Public DNS
"AD": false, // Whether all response data was validated with DNSSEC
"CD": false, // Whether the client asked to disable DNSSEC
"Question": [
{
"name": "s1024._domainkey.yahoo.com.", // FQDN with trailing dot
"type": 16 // TXT - Standard DNS RR type
}
],
"Answer": [
{
"name": "s1024._domainkey.yahoo.com.", // Always matches Question name
"type": 16, // TXT - Standard DNS RR type
"data": "\"k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDrEee0Ri4Juz+QfiWYui/E9UGSXau/2P8LjnTD8V4Unn+2FAZVGE3kL23bzeoULYv4PeleB3gfm\"\"JiDJOKU3Ns5L4KJAUUHjFwDebt0NP+sBK0VKeTATL2Yr/S3bT/xhy+1xtj4RkdV7fVxTn56Lb4udUnwuxK4V5b5PdOKj/+XcwIDAQAB; n=A 1024 bit key;\""
// Data for TXT - multiple quoted strings
}
],
}
DNS 字串
所有 TXT 記錄都會以單一 JSON 字串編碼,包括使用較長的 TXT 記錄格式,例如 RFC 4408 (SPF) 或 RFC 4871 (DKIM)。
EDNS
系統不支援一般的 EDNS 擴充功能機制。 EDNS 用戶端子網路選項 (edns-client-subnet) 是 GET 要求及 JSON 回應中的頂層欄位。