HTTPDNS在iOS上支持WKWebView接入吗

问题描述

WKWebViewWebKit框架提供的一个现代Web视图,用于在iOS应用中显示网页内容。它替代了旧的UIWebView,提供了更好的性能、更多的功能和更高的安全性。

如果期望WKWebView通过网络请求加载网页内容时,使用HTTPDNS作为DNS解析实现,有什么方案?HTTPDNSiOS上支持WKWebView接入吗?

问题原因

UIWebView已经停止维护了,App上网页加载切换使用WkWebView方案。

解决方案

由于Apple官方未在WkWebView上开放DNS解析相关的hook接口,也并未直接开放自定义网络请求实现的接口(类似Android上通过shouldInterceptRequest拦截GET请求),在WkWebView上集成HTTPDNS目前没有简单、兼容性广、完全无风险的方案。

如果对防劫持、调度精准有高要求,接受比较高的研发投入,那么通常建议这么实现:

  1. 使用混淆的私有API名称,拦截WkWebViewhttphttpsscheme,然后自定义自己的网络请求实现;

  2. 在自定义的网络请求逻辑中,使用HTTPDNS来处理域名解析;

  3. 需要特别考虑cookie、大文件请求等场景;

EMAS目前提供了一个实验性质的参考方案:EMASCurlWeb,该方案在Github上开源,可以考虑参考这个方案,自行结合业务需要,实现一个托管WkWebView网络请求的完整方案。在此基础上,还可以根据业务需要,进一步实现资源预取、自定义缓存等能力。

适用于

  • HTTPDNS