推荐理由
ATS(App Transport Security),是苹果在WWDC 15提出的,苹果将收紧http的访问,这样会造成我们周边的许多站点和应用均不能正常访问,这里就对ATS进行了简单分析。和如何利用TBS解决ATS问题。
2017年1月1日以后,所有iOS需要访问网页的app都要面临一个问题:ATS。
ATS(App Transport Security),是苹果在WWDC 15提出的,Apple 在推进网络通讯安全的一个重要方式,按照苹果的要求非https的网络访问是被禁止的;当然现阶段我们可以通过在info.plist里面中添加 NSAppTransportSecurity 字典并且将 NSAllowsArbitraryLoads 设置为YES 来禁用 ATS。
不过在WWDC 16中,Apple明确表示将收紧http的访问,从2017年1月1日起,所有提交的app默认不允许使用NSAllowsArbitraryLoads 来绕过ATS的限制,这样对于浏览器、手Q、空间等需要访问大量第三方http站点的应用来说,提前解决ATS的问题就迫在眉睫。
ATS是怎么让你访问不了HTTP的?
要完美解决ATS的问题, 需要找到一个方法既能够访问http站点,又能不使用NSAllowsArbitraryLoads 来绕过苹果的审核;
首先我们看Apple是通过什么办法让app不能使用http的,我们打开ATS进行尝试;发现ATS打开之后通过NSURLSession和NSURLConnection都不能使用http请求,因此我们怀疑是Apple通过自己的网络组件NSURLSession和NSURLConnection来控制http的访问。
因此我们进一步验证这个想法,我们用了浏览器的TBS组件,打开ATS之后通过spdy协议访问http请求,发现能够成功访问http网站。
最后我们确定Apple 是通过自己的网络组件来控制HTTP访问的,因此只要能自己实现http协议或者不用HTTP协议就能绕过ATS的限制。
但是怎么应对苹果的这个策略呢?不到两个月的时间重写一个并且稳定下来几乎就是一个不太可能完成的任务,而我们QQ浏览器TBS组件已经在QQ浏览器线上稳定运行好几年,灰常成熟和稳定,得到过千万级别用户的验证,是一个快速接入和上线的理想选择。下面我们介绍一下浏览器的TBS组件;
QQ浏览器 iOS-TBS解决ATS问题
iOS– TBS通过接管webview的网络层请求,将请求通过SPDY协议发送到浏览器的后台代理服务器;后台代理服务器再通过骨干网络去对方服务器抓取数据;
TBS的架构图如下:
这种实现方式有如下几个优势:
1.解决ATS的问题:
浏览器使用的SPDY协议是基于底层socket自己实现的网络通信组件,没有使用任何Apple提供的网络组件,并且也不是http协议,所以能够完美解决ATS防止http的问题,并且SPDY协议本身是二进制协议,安全性强于HTTP;
2.省流加速:
通过TBS和浏览器后台的长链接减少延时;
HTTP Header也压缩减少数据传输;
并发网络请求提高效率;
指定请求优先级加快网页展示;
后台还做了就快接入、图片压缩、资源缓存、广告过滤
3.解决运营商http网页劫持;
TBS和浏览器后台代理之间是SPDY协议通道,运营商劫持代价很高,所以不会劫持;后台的代理服务器和网站的server之间是通过骨干网络访问也避免了运营商劫持;
4.解决httpDNS的劫持
TBS和浏览器后台代理通过IP连接,HTTP请求到了后台的代理服务器才进行DNS解析,不给运营商DNS劫持机会;
5.集成了浏览器多年来对UIWebView解决的bug
6.spdy协议本身是支持加密的,相对http来说,安全性也是可以得到保障的;
前进后退缓慢问题、crash bug修复等等,后续还会增加WKWebview的过网络层hook,cookie等问题的修复;
现在已有手Q、京东、微云、空间等APP接入了TBS,为他们解决了ATS,网络劫持的问题。
文章出自腾讯云技术社区
https://www.qcloud.com/community/article/164816001481011909
推荐大家关注腾讯云技术社区微信公众号:QcloudCommunity