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开发指南。