本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。
本文介绍不使用SDK,直接访问 HTTPDNS API 进行解析时的注意点。
风险防范建议
当您通过API接入HTTPDNS服务时,为了降低解析失败对您业务的影响,我们有以下两点建议:
避免使用某个服务IP来请求解析,应该采用获取解析服务地址获取可用IP列表,并结合轮询逻辑实现解析。
如果轮询所有服务IP都未获得有效IP,请降级到LocalDNS来解析(即操作系统原生DNS链路)。
如果不采取上述建议,将存在较高的安全风险,且可能对您的业务带来重大影响(例如:某些硬件环境,将单服务解析IP固定化在系统中,没有降级机制,遇到服务IP被攻击就只能等到攻击结束,服务才能恢复)。
API接口文档
HTTP API使用启动IP获取服务IP的方式,服务IP不固定。
解析接口建议使用鉴权解析,您可以在控制台设置开启/关闭非鉴权解析请求。
非鉴权解析:不需要鉴权签名,任何人都可以进行请求,存在一些不安全因素。比如 https://203.107.XXX.XXX/(accountid)/d?host=域名,可以直接浏览器访问拿到解析结果,解析成功会计算解析次数,可以看到accountid携带在请求中。
鉴权解析:需要使用鉴权解析的secretKey进行鉴权生成加密串,然后将生成的加密串携带在请求中,而secretKey无需在请求中携带,所以secretKey不会暴露,安全级别较高。
异步处理
访问HTTPDNS服务时请做异步化处理,避免业务主流程同步等待网络解析过程。
案例:某客户在App端固化了单一的服务IP,并在业务请求中采用同步访问HTTPDNS服务IP的方式进行解析,如果遇到该服务IP被DDoS攻击进入黑洞时,会导致业务请求阻塞等待超时,App业务层受影响。
IP池轮转机制
访问HTTPDNS服务端时,请使用IP池轮转机制,某个IP访问不通时轮转到下一个进行重试,避免某个IP被DDoS攻击时受影响。
SDK重点功能
不使用SDK,直接访问HTTPDNS API进行域名解析,可以参考SDK功能点来编写自行使用的逻辑。
预解析
需要解析的域名host先进行解析,拿到结果进行缓存(缓存的时间可以是TTL时间,TTL过期后是否还有缓存可以酌情配置),便于后续直接获取解析结果。
自动刷新域名解析结果
在网络切换时,会自动刷新所有域名的解析结果,但会产生一定流量消耗。
设置降级
设置降级后,对应的域名不使用HTTPDNS进行解析。
是否允许HTTPDNS返回TTL过期的IP
当允许返回TTL过期的IP时,SDK在实时返回过期IP的同时依然会进行异步更新以获取最新的IP信息。
是否允许启用持久化缓存功能
该功能旨在提升首屏加载速度,但持久化缓存会将上一次解析到的结果保存到本地持久层,App重启后,如果启动持久化缓存会优先从持久层加载解析结果。
存在第一次使用的IP为过期IP(TTL过期,大多数情况下该IP依然可以正常使用)的可能性。
如果业务服务器IP变化较频繁,建议谨慎接入该功能,以免对业务造成影响。
持久化缓存影响“首次启动/网络切换”后域名解析结果,后续解析仍会请求HTTPDNS服务器,并更新本地缓存。
异步解析接口
首先查询缓存,若存在则返回结果,若不存在返回null并且进行异步域名解析更新缓存。
若接口返回null,为避免影响业务建议降级到Local DNS解析策略。
sessionId生成并在解析请求时携带
获取用于用户追踪的sessionId,便于追踪历史问题。
sessionId为随机生成,长度为12位,App生命周期内保持不变。
详细使用请参见API接口问题。