什么是 RDAP?
RDAP(Registration Data Access Protocol,注册数据访问协议)是用于访问域名注册数据的现代协议,已由 IETF 标准化。RDAP 作为 WHOIS 的后继协议而开发,以 JSON 格式提供结构化、机器可读的响应,使开发者更容易将域名查询功能集成到自己的应用程序中。
RDAP 对开发者为何重要
如果你曾经尝试解析 WHOIS 数据,就会了解其中的困难。每个注册商对响应的格式各不相同,使用不一致的字段名称,并返回需要复杂正则表达式才能提取有用信息的非结构化纯文本。RDAP 通过标准化的 JSON 架构解决了这些问题,该架构在所有符合 RDAP 的服务器之间保持一致。
主要技术优势
结构化 JSON 响应:RDAP 响应使用 RFC 9083 定义的标准化 JSON 数据模型。这为客户端提供了一致的解析结构,但服务可能会根据其访问策略省略或脱敏字段。 RESTful 架构:RDAP 使用标准 HTTP 方法和状态码。当服务器找到匹配对象时,GET 请求会返回域名信息。404 响应表示查询的对象在该服务中未找到;这本身并不能证明该域名可以注册。 默认使用 HTTPS:WHOIS 通过 43 端口以纯文本传输数据,而 RDAP 使用 HTTPS,确保你的应用程序与 RDAP 服务器之间的通信经过加密。 国际化支持:RDAP 能够正确处理 IDN(国际化域名)和 Unicode 字符,这对全球化应用程序至关重要。RDAP 的工作方式
当你通过 RDAP 查询域名时,流程会遵循以下步骤:
1. Bootstrap 发现:你的客户端查询 IANA RDAP Bootstrap 注册表,以查找该 TLD 的权威 RDAP 服务器
2. HTTP 请求:向 RDAP 服务器 URL 发出 GET 请求(例如:https://rdap.verisign.com/com/v1/domain/example.com)
3. JSON 响应:服务器返回一个结构化 JSON 对象,其中包含注册数据、状态码和事件
RDAP 响应结构示例
{
"objectClassName": "domain",
"handle": "example.com",
"ldhName": "example.com",
"status": ["client transfer prohibited"],
"events": [
{"eventAction": "registration", "eventDate": "1995-08-14T04:00:00Z"},
{"eventAction": "expiration", "eventDate": "2025-08-13T04:00:00Z"}
]
}
RDAP 与 WHOIS 对比
| 特性 | RDAP | WHOIS |
|---|---|---|
| 数据格式 | 结构化 JSON | 非结构化文本 |
| 传输方式 | HTTPS(加密) | 纯文本(43 端口) |
| 标准化程度 | RFC 9082 和 RFC 9083 | 不一致 |
| IDN 支持 | 原生支持 | 有限支持 |
| 查询类型 | RESTful HTTP | 自定义协议 |
在应用程序中实现 RDAP
对于构建域名工具的开发者而言,RDAP 是推荐的方法。包括 DomScan 在内,大多数现代域名可用性检查器都将 RDAP 作为主要数据源,因为它提供:
- 可用性证据:404 响应表示查询的 RDAP 服务器未找到匹配对象。这本身并不能证明该域名可以注册
- 丰富的元数据:可获取注册日期、到期日期和状态码
- 一致的解析:一个代码库即可处理所有 TLD
RDAP 的采用状况
对于 gTLD,ICANN 表示 RDAP 已于 2025 年 1 月 28 日成为注册信息的权威来源,gTLD 注册局和注册商通常不再需要提供 WHOIS 服务,但 .com、.name 和 .post 除外。各 ccTLD 的政策和 RDAP 采用情况有所不同。IANA Bootstrap 文件 https://data.iana.org/rdap/dns.json 提供所有受支持 TLD 的当前 RDAP 服务器映射。
最佳实践
实现 RDAP 查询时,应适当缓存响应以遵守速率限制,实现 IANA Bootstrap 以发现服务器,并分别处理未找到、重定向和策略相关的错误响应。未找到响应是关于所查询服务的证据,而不是该域名具备注册资格的证明。