DoH JSON API的URL 介面 (提供TLS和非TLS API)。
介面地址
https://223.5.5.5/resolve?name=網域名稱&type=記錄類型&uid=AccountID&ak=AccessKey ID&key=****&ts=時間戳記
http://223.5.5.5/resolve?name=網域名稱&type=記錄類型&uid=AccountID&ak=AccessKey ID&key=****&ts=時間戳記
https://223.6.6.6/resolve?name=網域名稱&type=記錄類型&uid=AccountID&ak=AccessKey ID&key=****&ts=時間戳記
http://223.6.6.6/resolve?name=網域名稱&type=記錄類型&uid=AccountID&ak=AccessKey ID&key=****&ts=時間戳記
請求參數
請求方式GET,請求參數請查看如下列表:
參數 | 類型 | 描述 | 樣本 | 使用方法和預設值 |
name | string | 請求網域名稱 | name=www.taobao.com | 必選,無預設值 |
type | string | type=A | 可選,無預設值 | |
edns_client_subnet | IP | ECS IP | edns_client_subnet=1.2.XX.XX/24 | DNS代理使用,普通用戶端不適用 |
short | boolean | short=true 或者 short=1 | 可選,預設關閉 | |
uid | string | uid即控制台上的Account ID非阿里雲帳號ID | uid=9**9 | 必選,無預設值 |
ak | string | ak即控制台中的 AccessKey ID | ak=test | 必選,無預設值 |
ts | string | 時間戳記 | 無符號整型,從 1970.1.1 以來的秒數 | ts=1614927253 必選,無預設值 |
key | string | 鑒權用雜湊串 | 使用AccessKey Secret產生的簽名 | key=fb321ab77496a89c04de0a1e979bfee4b4678a0dcd57f4da1da83****490f64b 必選,無預設值 |
did | string | 裝置ID | did=afck0100 | 可選 |
關於edns_client_subnet參數
edns_client_subnet是為了支援DNS ECS功能(RFC7871),將使用者的子網資訊傳遞給權威DNS,以便進行更精確的DNS解析和流量調度。其中,掩碼越長的地址資訊越精確,掩碼越短則使用者隱私效果越好,建議使用“/24”掩碼長度。
該參數是特地為DNS代理(proxy)使用DoH JSON API情境設計,即使用者發送DNS查詢給DNS代理,DNS代理通過該參數攜帶使用者的子網資訊傳遞給移動解析HTTPDNS,最後傳遞到權威DNS伺服器。
例如edns_client_subnet=1.2.XX.XX/24,權威伺服器會收到基於1.2.XX.XX/24地址首碼資訊來協助使用者選擇DNS鏈路。
關於type參數支援類型
記錄類型 | ID | 說明 |
A | 1 | IPv4地址 |
NS | 2 | NS記錄 |
CNAME | 5 | 網域名稱 CNAME 記錄 |
SOA | 6 | ZONE 的 SOA 記錄 |
TXT | 16 | TXT 記錄 |
AAAA | 28 | IPv6 地址 |
PTR | 12 | PTR記錄,用於反向DNS尋找 |
MX | 15 | 郵件交換記錄 |
SRV | 33 | SRV記錄為特定的服務指定主機和連接埠 |
CAA | 257 | CAA記錄是一項防止HTTPS認證錯誤頒發的安全措施 |
鑒權相關參數key的產生演算法
key = sha256(AccountID+AccessKey Secret+ts+qname+AccessKey ID)
註:加號(+)表示字串相連,並非實際使用“+”。 其中,Account ID 為數字直接轉換的字串,比如 9**9 使用者,使用字串為 "9**9",ts為當前請求的時間戳記,qname 為使用者此次請求的網域名稱,AccessKey ID 和 AccessKey Secret 參考建立密鑰產生。
key 產生樣本
假如:
Account ID=5***4
AccessKey Secret=12345**
qname=aliyun.com
ts=1614927253
AccessKey ID=5***4_2155917885567****
key=sha256(5***412345**1614927253aliyun.com5***4_2155917885567****)
產生的key為:
key=*****ab77496a89c04de0a1e979bfee4b4678a0dcd57f4da1da83***a490f64b
請求樣本
https://223.5.5.5/resolve?name=網域名稱&type=記錄類型&uid=AccountID&ak=AccessKey ID&key=****&ts=時間戳記
返回樣本
{
"Status":0,
"TC":false,
"RD":true,
"RA":true,
"AD":false,
"CD":false,
"Question":{ // 請求段
"name":"www.taobao.com.",
"type":1
},
"Answer":[ // 應答段
{
"name":"www.taobao.com.",
"TTL":45,
"type":5,
"data":"www.taobao.com.danuoyi.tbcache.com."
},
{
"name":"www.taobao.com.danuoyi.tbcache.com.",
"TTL":45,
"type":1,
"data":"47.246.XX.XX"
},
{
"name":"www.taobao.com.danuoyi.tbcache.com.",
"TTL":45,
"type":1,
"data":"47.246.XX.XX"
}
]
//"Authority" 權威段, 如果有資料與Answer欄位一致
//"Additional" 附加段, 如果有資料與Answer欄位一致
// 可選 "edns_client_subnet":"1.2.XX.XX/24"
}傳回值說明
欄位名 | 描述 | 樣本 |
Status | DNS 報文頭的 rcode | 0: noerror 1: formerr 2: servfail 3: nxdomain |
TC | DNS 報文頭的 TC,標識是否可截斷 | 通常為 false |
RD | DNS 報文頭的 RD,表示是否期望遞迴 | 通常為 true |
RA | DNS 報文頭的 RA,表示是否為可用遞迴 | 通常為 true |
AD/CD | 對應的 DNS 報文頭的標識 | 通常為 false |
Question | DNS 請求欄位 | 無 |
Answer | DNS 應答欄位 | 無 |
name | 網域名稱,Question 和 Answer 都包含 | www.taobao.com |
type | 請求類型,參考上文中“關於type參數支援類型” | 如:A、AAAA、TXT、CNAME、NS、SOA |
TTL | 應答值在伺服器中的最大緩衝時間,單位為秒 | 3600 |
data | 應答結果,與 type 相關 | 無 |
short 模式應答樣本:
以www.taobao.com為例,當請求為 A 記錄時,請求 URL 為:
https://223.5.5.5/resolve?name=網域名稱&type=A&uid=AccountID&short=1&ak=AccessKey ID&key=****&ts=時間戳記應答如下:
["221.229.XX.XX","61.155.XX.XX","221.229.XX.XX"]當請求為 CNAME 記錄時,URL 為:
https://223.5.5.5/resolve?name=網域名稱&type=CNAME&uid=AccountID&short=1&ak=AccessKey ID&key=****&ts=時間戳記應答如下:
["www.taobao.com.danuoyi.tbcache.com."]失敗應答
請求失敗時,HTTP響應的狀態代碼為4xx/5xx,同時返回具體的錯誤碼,用於調試或者障礙上報,結果用JSON 表示。
失敗應答執行個體:
{
"code":"UrlParameterError"
}錯誤碼列表
錯誤碼 | HTTP狀態代碼 | 描述 |
UrlParameterError | 400 | 請求參數格式錯誤 |
NoPermission | 401 | 使用者鑒權失敗 |
UrlPathError | 404 | URL錯誤 |
NoResponse | 500 | 請求逾時無應答 |
使用DoH JSON API的方式來接入移動解析HTTPDNS進行網域名稱解析,請參考DoH JSON API 接入最佳實務.
推薦使用 SDK 接入,SDK 中已包含簽名代碼,無需自行實現。SDK接入請參考Android SDK開發指南和iOS SDK開發指南。