解决webview中的DNS查找问题

时间:2015-09-15 03:41:57

标签: android ios webview dns

我们公司的应用程序主要是嵌入在android / iPhone原生应用程序中的webview。在某些区域,dns查找始终失败,这导致打开我们的webview页面时出错。

我们找到了一种名为HttpDNS的技术,它可以解决纯本机应用程序的dns查找问题,因为它可以通过ip(从HttpDNS获取)而不是域发送http请求,并手动设置http头的域。但是在webview中,我们不能这样做。

那么有没有办法解决webview中的DNS问题?谢谢(我们发现我们可以在app中设置一个可以解决dns查找问题的代理,但这种方法并不那么新颖。)。

1 个答案:

答案 0 :(得分:1)

你可以:

  • 检测页面加载失败并重试
  • 提供一个自定义委托,拦截每个请求,执行查找,使用NSURLConnection / NSURLSession加载内容,然后将内容注入Web视图。

当然,这两种方法都不是完美的,因为只有当用户在Web视图中加载替换当前页面的页面时才会有效(与随机XMLHTTPRequest调用相反)。

然后,总有:

  • Swizzle NSURLConnection和NSURLSession,根据您自己的查找代码的结果重写请求对象,并覆盖Host头字段。

虽然这确实具有即使对于XHR也有效的优势,但我倾向于建议针对公开发布的应用程序采用这种方法,原因有三:

  • Apple说不要触摸主机头字段,这意味着未来的操作系统更新可能会破坏行为(假设它甚至可以正常工作)。
  • 如果你错误地调整这些课程,那么打破这些课程真的很容易。
  • 它将改变这些类对来自您的应用的每个请求的行为方式,而不仅仅是网络视图发出的请求。

当然,您可以通过添加libcurl并使用它来执行实际请求来避免第一个问题,但随后您将陷入严重可怕的兼容性领域。 : - )

您可能最好不要试图找出DNS查找失败的原因。是否被滥用的ISP或政府在本地阻止?您是否可以将VPN技术添加到您的应用中,以便您的URL(和DNS查找)请求通过隧道路由?