Android开发Android技术知识程序员

Url重构以及防DNS劫持的相关问题

2017-03-12  本文已影响644人  d74f37143a31

为什么做Url配置?

由于公司的 Url 设计的不合理同时没有统一的规范。每个功能对应着 2 条 Url ,一条正式,一条测试。而且正式接口和测试接口是的域名是有很大差别的(Url 保密 ,有些内容用数字和*代替,文中皆是)。

例如:
搜索的接口正式:http://.****.net/json.php?do=Search
搜索的接口测试:http://
.test.****.cn/json.php?do=Search

有的接口是可以划分为同一模块,但是并没有。

如下:
搜索的接口:http://123.****.net/json.php?do=Search.Bar
搜索首页信息的接口:http://234.****.com/json.php?do=Main

二者都属于搜索,但是接口差别却很大。域名没有统一。

而且公司中有些不同的功能用的还是同一接口,这样会导致一个接口出问题了等于两个功能同时不能使用,影响很大。

怎么去做?

例如搜索模块
之前的域名由于历史原因不方便修改,所以就不对之前的域名进行修改,以后新添加的功能对应的域名就应该按模块化划分。可以是域名一致,当功能点不同时可以在域名之后添加不同的参数。例如:
搜索功能一的 Url 如下表示:http://search.****.com/function1/...,
搜索模块二的 Url 如下表示:http://search.****.com/function2/...,

经上分析,我们目前的优化方式是:
控制开关( 判断是采用正式接口还是测试接口 )和 Url 接口分别写在 XML 文件中,在 Java 类中只写一个方法去调用开关和 Url 接口然后判断是使用正式接口还是测试接口。

Retrofit 简介

DNS劫持和Url配置的关系

造成这种现象可能是本地运营商将我们的 Url 重定向到其他假的ip地址又或者黑客将我们的数据屏蔽掉了,这我们不得而知。但是给我们用户造成的后果就是用户访问不了数据,用户不开心了,体验超级不好!所以为了给用户更好地饿体验,同时提高我们App的容错性,出现DNS防劫持的问题。

劫持原理 由于域名不方便贴出,不理解的回复我

被劫持后的数据是红色的数据,红色代表访问网络失败。当被劫持后主题管家会切换备用域名进行防劫持,之后请求数据会一直使用备用域名进行访问数据。

第一张
第二张

DNS劫持和Http劫持的区别

原理 网页中的逛广告

DNS劫持的现象:
你输入的网址是 http://www.google.com,出来的是百度的页面。
HTTP劫持的现象:
你打开的是百度的页面,右下角弹出一款游戏广告。

如何防范DNS劫持

两种方案的具体实现

List<InetAddress> inetAddresses = Arrays.asList(InetAddress.getAllByName(hostname));
OkHttpClient builder = new OkHttpClient.Builder()
                .dns(new HttpDns())
                .build();

结论

首先是将所有Url进行模块化划分,然后项目老旧的 Url 可能不好修改,所以利用 Retrofit 提供注解请求 HTTP 的特性进行优化,后期添加的功能就按照新制定的规则去设计Url。在防DNS劫持这里,通过比较发现还是使用比较成熟的HttpDNS 方案去实现,然后利用OkHttp 提供的Interceptor 劫持器去实现域名向ip的切换,同时可以在Interceptor中可以利用加权轮询算法实现服务器的负载均衡以及ip的正确分配。

上一篇 下一篇

猜你喜欢

热点阅读