问题描述
WKWebView是WebKit框架提供的一个现代Web视图,用于在iOS应用中显示网页内容。它替代了旧的UIWebView,提供了更好的性能、更多的功能和更高的安全性。
如果期望WKWebView通过网络请求加载网页内容时,使用HTTPDNS作为DNS解析实现,有什么方案?HTTPDNS在iOS上支持WKWebView接入吗?
问题原因
UIWebView已经停止维护了,App上网页加载切换使用WkWebView方案。
解决方案
由于Apple官方未在WkWebView上开放DNS解析相关的hook接口,也并未直接开放自定义网络请求实现的接口(类似Android上通过shouldInterceptRequest
拦截GET请求),在WkWebView上集成HTTPDNS目前没有简单、兼容性广、完全无风险的方案。
如果对防劫持、调度精准有高要求,接受比较高的研发投入,那么通常建议这么实现:
使用混淆的私有API名称,拦截WkWebView的
http
和https
scheme,然后自定义自己的网络请求实现;在自定义的网络请求逻辑中,使用HTTPDNS来处理域名解析;
需要特别考虑cookie、大文件请求等场景;
EMAS目前提供了一个实验性质的参考方案:EMASCurlWeb,该方案在Github上开源,可以考虑参考这个方案,自行结合业务需要,实现一个托管WkWebView网络请求的完整方案。在此基础上,还可以根据业务需要,进一步实现资源预取、自定义缓存等能力。
适用于
HTTPDNS
该文章对您有帮助吗?