标签:
之前的工作中,经常会遇到DNS解析出问题导致网络交互的操作无法正常进行。
在很多的移动开发过程中,与服务端的交互的url通常是包含域名的。而在实际的网络交互的过程中,第一步就需要对域名进行dns解析。
复杂的网络环境里面,dns解析会耗费很长的时间、甚至是解析失败。这是经常会发生的。
所以这一步的优化是非常至关重要的。
有那么一种方案叫:IP直连
就是在网络交互的过程中,跳过域名的DNS解析,直接用IP进行网络交互。可以避免这一大麻烦。
针对这一方案,衍生出了httpdns,目前有下面几家出名的的:
它们的基本的实现方法是:
当然,这里面每一步都有很多的细节。
其中需要重要的一点是:对于一个IP主机挂载多个Server的情况,在使用IP直连时,Host头需要设置域名
代码如下:
public static HttpURLConnection getHttpURLConnection(String urlString) throws IOException { URL url = new URL(urlString); String originHost = url.getHost(); HttpURLConnection conn; String dstIp = httpdnsService.getIpByHost(url.getHost()); //这里得到了IP地址 if (dstIp != null) { Log.d("HttpDNS Demo", "Get IP from HttpDNS, " + url.getHost() + ": " + dstIp); urlString = urlString.replaceFirst(url.getHost(), dstIp); url = new URL(urlString); conn = (HttpURLConnection) url.openConnection(); // 设置HTTP请求头Host域 conn.setRequestProperty("Host", originHost); // 这里是设置head中的host return conn; } else { Log.d("HttpDNS Demo", "Degrade to local DNS."); return (HttpURLConnection) url.openConnection(); } }
更多的内容和介绍,可以参考下面的文章:
标签:
原文地址:http://www.cnblogs.com/zhou-guobao/p/5401124.html