HTTPDNS代替了传统的LocalDNS完成递归解析的功能,基于HTTP协议的设计可以适用于几乎所有的网络环境,同时保留了鉴权、HTTPS等更高安全性的扩展能力,避免恶意攻击劫持行为。
传统域名解析的调度精准性问题,本质根源在于Local DNS的部署和分配机制上。由于碎片化的管理方式,这些环节的服务质量同样很难得到保障。HTTPDNS在递归解析实现上优化了与权威DNS的交互,通过<a name="https://datatracker.ietf.org/doc/rfc7871">edns-client-subnet</a>协议将终端用户的IP信息直接交付给权威DNS,这样权威DNS就可以忽略Local DNS IP信息,根据终端用户的IP信息进行精准调度,避免Local DNS的坐标干扰
服务端提供API接口,app端直接通过ip地址访问,ip地址可以有多个
请求方式:HTTP GET
URL参数说明:
请求示例:
考虑到服务IP防攻击之类的安全风险,为保障服务可用性,HTTPDNS同时提供多个服务IP,当某个服务IP在异常情况下不可用时,可以使用其它服务IP进行重试。
错误码列表如下:
异常下的出错兼容逻辑,主要包括异步请求,重试,降级
异步请求
重试
降级
OkHttp默认使用系统DNS服务InetAddress进行域名解析,但同时也暴露了自定义DNS服务的接口,通过该接口我们可以优雅地使用HttpDns。
OkHttp暴露了一个Dns接口,通过实现该接口,我们可以自定义Dns服务:
创建OkHttpClient对象,传入OkHttpDns对象代替默认Dns服务:
相比于通用方案,OkHttp+HttpDns有以下两个主要优势:
基于NSURLProtocol可拦截iOS系统上基于上层网络库NSURLConnection/NSURLSession发出的网络请求;
通过以下接口注册自定义NSURLProtocol,用于拦截上层网络请求,并创建新的网络请求接管数据发送、接收、重定向等处理逻辑,将结果反馈给原始请求。
自定义NSURLProtocol处理过程概述:
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)