移动端为何须要HTTPDNS?

移动端为何须要HTTPDNS?

关于这个问题,若是你只能回答出为了防止webview被域名劫持,那这篇文章你就须要好好读一读了。本篇文章将从多个角度 剖析为何对于移动app来讲,HTTPDNS十分必要。android

回顾下DNS的原理

要理解为何移动app须要httpdns,首先要理解DNS的原理,知道DNS的工做模式,以及有什么问题,才能分析出HTTPDNS的优点。ios

DNS的工做模式:web

1.在一台pc上输入 网址 www.taobao.com. 此时这台电脑会发出一个dns请求,注意这个dns请求是被发给本地dns服务器的。跨域

基本上本地dns服务器若是不通过特殊设置的话,咱们能够理解为你的网络提供商好比中国电信在你附近设置的一个本地dns服务器缓存

2.这台中国电信的本地dns服务器接收到这条请求之后,就会查看本身的缓存表,若是发现taobao.com这个在缓存表里有,那么就 直接返回ip,若是没有 就只能去根dns服务器查找。这里要注意啊,根域名服务器全球就只有13台,不负责解析dns请求,也就说 这13台服务器不会直接告诉你这个域名的ip地址可是会告诉你去哪里找,相似于你找总统办事,总统不会亲自帮你作事,可是会 找下面的小弟来帮你解决服务器

3.根dns服务器收到请求之后会告诉你 去 顶级域名服务器找,而后顶级域名服务器就告诉你 你去 负责taobao.com的 权威dns 服务器找ip吧。所谓权威dns服务器通常都是大的顶级网站自家会放一个,因此叫权威dns服务器,毕竟本身解析本身固然权威了, 因此最终 权威dns服务器就会把ip 告诉你家附近的本地dns服务器,而后本地dns服务器就返回一个ip地址 告诉你的电脑这个域名 对应的ip是多少。网络

DNS仅仅有返回IP地址的做用吗?

可能对于多数客户端开发来讲,对dns的理解就仅仅是经过域名找ip的做用了。但其实dns的做用远远不止于此。DNS甚至能够 作负载均衡。 还记得咱们的权威dns服务器吗?这个地方就能够作一个负载均衡的功能,最简单的,收到dns请求之后, 均衡的分配不一样的ip地址。甚至是返回一个最优的ip给本地dns。所谓最优的ip固然就是 给你一个离你家最近的ip了。app

DNS有哪些不足和问题?

1.缓存失效问题。 比方说我在南京南站吃过一次肯德基, 若是我到了南京站的这个位置还想吃肯德基,我固然会选择南京站附近的肯德基, 没人会选择再跑去南京南站吃KFC吧。 本地dns服务器就会有这个问题。负载均衡

他的缓存不会及时更新,就会出现上述状况。有的时候甚至他还会故意配置一个错的ip,用来作运营商劫持。移动端web

2.运营商偷懒转发dns请求。 这个对于移动端来讲也是常见的问题,比方说中国移动的基站发现这个时候压力太大了,他就会偷懒,把这个dns请求 转发给中国联通,而后中国联通一番操做之后查询到你的权威dns服务器,你的权威dns服务器觉得你是联通的用户 就给你一个联通的ip地址,但其实你是移动的用户。你后续的访问都会由于涉及到 运营商跨域的问题而下降接口响应速度。

3.对于在家连wifi的用户来讲还有更坑的状况。 你们都知道咱们在家上网的地址都是所谓内网地址,咱们与外界的访问都是经过运营商提供的nat服务来进行的, 也就说咱们在家上网的时候每次请求都会由运营商把咱们的内网地址转换成与外网链接的外网地址。这个过程叫NAT. 这个NAT转换就坑爹了,他转换过的地址不是固定的,这会致使咱们的权威dns服务器认错,好比你明明是中国移动的宽带用户, nat之后,权威dns就认为这个是联通的用户,又返回了一个联通的ip节点。。。。 这里不得不吐槽长城宽带,nat出来的地址全国飘。

4.没法作容灾处理。 比方说,我如今有台服务器ip为1.2.3.4的 server挂了,我如今权威dns服务器发现这个问题之后我更新这个ip为1.3.5.7, 这样新的dns请求就不会访问这个1.2.3.4了,问题是老的用户呢?谁也不知道运营商本地dns服务器的更新频率, 那这个服务器的灾备容灾还咋作?没办法作

5.DNS解析时间过长 在一些信号差的地方,对移动用户影响是致命的,若是本地dns查询不到这个域名的ip,他就会走一段很长的路查询这个对应的ip, 若是信号不稳定的话,这个递归遍历查ip的过程极可能会超时甚至挂掉。

那么整体来讲,DNS面临的就是这些问题,能够看出来,这些问题对于移动app来讲影响都很致命。哪怕没有dns劫持致使 移动端webview展现一些奇怪的广告,就这些体验问题和技术问题也是不容许存在的。因此咱们才有了httpdns来解决上述问题。

HTTPDNS 如何解决上述问题?

对httpdns还陌生的人,能够先去阿里云上玩一玩这个httpdns,都有现成的android或者ios的demo。这里再也不重复说了。 大概讲一下httpdns的工做原理。

1.客户端的sdk在收到dns请求之后,会去httpdns服务器上查询ip。查询到了就会把这个域名和ip的映射关系保存在本地。

这个地方能够看出来,这个缓存是由sdk本身控制的跟 运营商无关了。既然是本身控制也就不存在域名劫持,缓存 更新不及时等问题。

2.由于查询dns的过程是 发一个http请求到 httpdns服务器上,全过程可控,因此咱们的httpdns服务器固然知道 你手机的状况,你在哪,你是哪一个运营商 均可以拿到你的信息 天然能够返回你最合适的ip。

避免出现老的dns那种返回不恰当的ip的现象。这个负载均衡就基本完美。

3.老式的dns解析,若是缓存没命中要递归查询过久了,咱们这里一个http请求就完事。速度也快

  1. 至于sdk的dns本地缓存策略就是大家本身和服务器商量的事了。精准可控,选择一套最适合大家的缓存策略吧。

最后,就算使用httpdns也要作降级方案,万一httpdns挂了咱们还能够走老的dns,慢一点总比全站瘫痪强

相关文章
相关标签/搜索