美文网首页安卓网络
关于HttpDns在Android移动端的实现方案

关于HttpDns在Android移动端的实现方案

作者: 西门只会吹雪 | 来源:发表于2019-01-17 11:19 被阅读0次

场景一:Api接口请求场景

选用阿里云HttpDns服务,利用HttpDns解析获得ip后进行ip直连的方法。

  当前项目中网络数据请求框架采用Okhttp+Retrofit组合,OkHttp暴露了一个Dns接口,通过自定义一个Dns解析器替换系统默认Dns实现。若获取IP失败则选用默认Dns解析。

参考HttpDns+OkHttp最佳实践

场景二:WebView业务场景

选用阿里云HttpDns服务,主要实现方案同样是IP直连。

1.对WebView加载的Url进行拦截:WebView提供了setWebViewClient接口对网络请求进行拦截,通过重载WebViewClient中的shouldInterceptRequest方法,我们可以拦截到所有的网络请求。
2.将拦截到的请求域名替换成ip,添加原有头部信息,设置Http请求头Host域;
3.如果拦截到的请求是HTTPS请求,需要进行证书校验,如果请求涉及到SNI场景,需要自定义SSLSocket;
4.如果服务端返回重定向,此时需要判断原有请求中是否含有cookie;
5.根据拦截的头信息获取MIME类型以及编码类型来判断本次请求是否拦截。

参考Android Webview + HttpDns最佳实践

注意事项

1.阿里云HttpDns服务提供预解析功能,可以将常用域名加入预解析列表中。
httpDnsService.setPreResolveHosts(new ArrayList<>(Arrays.asList("app.xxxx.com")));
2.WebView可用场景

前提条件:

  • API Level >= 21
  • GET请求
  • 可以获取到MIME类型以及编码信息请求或是可以获取到MIME类型的二进制文件请求

可用场景:

  • 普通HTTP请求
  • HTTPS请求
  • SNI请求
  • HTTP报头中不含cookie的重定向请求。
3.不可用场景
  • API Level < 21的设备
  • POST请求
  • 无法获取到MIME类型的请求
  • 无法获取到编码的非二进制文件请求

相关文章

  • 关于HttpDns在Android移动端的实现方案

    场景一:Api接口请求场景 选用阿里云HttpDns服务,利用HttpDns解析获得ip后进行ip直连的方法。 参...

  • Android端HttpDNS优化方案

    1. 需求与问题 在互联网企业中绝大多数都是使用域名来给用户提供服务,但是在有中国特色的互联网环境中遭遇到各种域名...

  • 移动端网页的优化

    1 网络节点优化(HTTPDNS) 移动解析HttpDNS CloudXNS HttpDNS 【鹅厂网事】全局精确...

  • [iOS] NSURLProtocol

    前言:最近在了解HttpDns的实现方案,经过调研,发现了NSURLProtocol这个在Apple URL Lo...

  • 移动端布局

    移动端布局 移动端h5、Android、iOS的各自实现方式不同,布局方式也不同。但,随着移动终端的普及,用户展示...

  • EventBus源码分析

    关于EventBusEventBus作为Android端的事件总线,为移动端页面间的事件传递提供了很大的便利。在使...

  • 鼠标控制旋转

    鼠标在PC端移动,实现对象的旋转;手指在安卓端移动,实现对象的旋转。

  • 新能力 | 云开发基于Flutter的云端一体化探索

    导语 Flutter 框架是当下移动客户端开发最热门的解决方案,除了可以跨 Android、iOS、web 三端之...

  • Windows 与移动设备socket通讯

    最近有个移动端向Windows PC端发文件,考虑Socket 方案实现. 现记录代码如下: Windows 代码...

  • 移动端页面适配

    说起移动端适配可能会有很多适配方案。 最开的适配方案回顾: 1.if(/Android (\d+\.\d+)/.t...

网友评论

    本文标题:关于HttpDns在Android移动端的实现方案

    本文链接:https://www.haomeiwen.com/subject/kpbbdqtx.html