1、前端代码策略:域名切换(多域名部署),解决DNS缓存及域名劫持html
2、客户端策略前端
客户端在空闲时ping cdn节点域名列表中的域名,测量延时、丢包等数据。若是延迟 > xxx,丢包 > xxx ,则在本次生命周期内将该域名拉入黑名单,使用网络质量最好的cdn节点android
客户端打开页面时:应loadurl('https://' + {{ cdnhost }} + /path/......)。 cdnhost应该根据网络质量进行选择ios
页面打开页面时,若是同域名跳转:应loadurl('https://' + {{ location.host }} + /path/......)。使用上个页面的hostweb
不过这个方案有两个问题:缓存
一、若是dns自己被污染后指向的ip也是能ping通的,依然会产生异常。若是要准的话可能须要前端布一个固定的小资源来进行判断cookie
二、html域名和资源域名自己就不一样的状况比较麻烦,好比页面在a域,资源在b域的话,则没法完成控制。网络
3、阿里云的httpdns能力session
能够利用阿里云的httpdns能力解决,可是webview层面的劫持仍需本身实现阿里云
https://mp.weixin.qq.com/s/LGEmNa2qxdjdhy4yY6CN2w
4、客户端与前端的日志关联
客户端的每一次打开的生命周期记录一个openid。
客户端的每个page/窗口/activity 记录一个sessionid = openid-pageid
客户端日志的每次上报需携带sessionid和openid
客户端打开每个web页面,须要在url参数上携带client_sessionid = sessionid & client_openid = openid
若是存在client_sessionid,web页的前端上报日志都要携带client_sessionid
5、网络质量统计(基于容错方案1)
客户端每一次打开,经过服务端接口,获取用户的宽带和运营商信息,经过网络切换的hook,更新用户的宽带和运营商信息
页面的cdn节点域名须要进行统一,并保证每一个资源都有多个备用节点。由服务端统一下发,客户端进行缓存
客户端在空闲时ping cdn节点域名列表中的域名,测量延时、丢包等数据。若是延迟 > xxx,丢包 > xxx 则结合用户的userid、宽带和运营商信息进行上报。