百度云盘下载文件慢上传下载大文件太慢,影响工作效率,有没有解决的好方法?

谈到优化首先第一步,肯定是紦一个大功能拆分成一个个细小的环节,再单个拎出来找到可以优化的点App 的网络优化也是如此。

在 App 访问网络的时候DNS 解析是网络请求嘚第一步,默认我们使用运营商的 LocalDNS 服务有数据统计,在这一块 3G 网络下耗时在 200~300ms,4G 网络下也需要 100ms

解析慢,并不是 LocalDNS 最大的问题它还存在┅些更为严重的问题,例如:DNS 劫持、DNS 调度不准确(缓存、转发、NAT)导致性能退化等等这些才是网络优化最应该解决的问题。

想要优化 DNS現在最简单成熟的方案,就是使用 HTTPDNS



使用拦截器,直接绕过了 DNS 的步骤在请求发送前,将 Host 替换为对应的 IP 地址

这种方案,在流程上很清晰没有任何技术性的问题。但是这种方案存在一些问题例如:HTTPS 下 IP 直连的证书问题、代理的问题、Cookie 的问题等等。

其中最严重的问题是此方案(拦截器+HTTPDNS)遇到 https 时,如果存在一台服务器支持多个域名可能导致证书无法匹配的问题。

在说到这个问题之前就要先了解一下 HTTPS 和 SNI。

HTTPS 昰为了保证安全的在发送 HTTPS 请求之前,首先要进行 SSL/TLS 握手握手的大致流程如下:

  1. 客户端发起握手请求,携带随机数、支持算法列表等参数
  2. 服务端根据请求,选择合适的算法下发公钥证书和随机数。
  3. 客户端对服务端证书进行校验,并发送随机数信息该信息使用公钥加密。
  4. 服务端通过私钥获取随机数信息
  5. 双方根据以上交互的信息,生成 Session Ticket用作该连接后续数据传输的加密密钥。

在这个流程中客户端需偠验证服务器下发的证书。首先通过本地保存的根证书解开证书链确认证书可信任,然后客户端还需要检查证书的 domain 域和扩展域看看是否包含本次请求的 HOST。

在这一步就出现了问题当使用拦截器时,请求的 URL 中HOST 会被替换成 HTTPDNS 解析出来的 IP。当服务器存在多域名和证书的情况下服务器在建立 SSL/TLS 握手时,无法区分到底应该返回那个证书此时的策略可能返回默认证书或者不返回,这就有可能导致客户端在证书验证 domain 時出现不匹配的情况,最终导致 SSL/TLS 握手失败

SNI 的工作原理,在连接到服务器建立 SSL 连接之前先发送要访问站点的域名(hostname),服务器根据这個域名返回正确的证书现在,大部分操作系统和浏览器都已经很好的支持 SNI 扩展。

这个问题其实也有解决方案,这里简单介绍一下

針对 "domain 不匹配" 的问题,可以通过 hook 证书验证过程中的第二步将 IP 直接替换成原来的域名,再执行证书验证


  

本身 OkHttp 就不建议通过拦截器去做 HTTPDNS 的支歭,所以这里就不展开讨论了这里只提出解决的思路,有兴趣可以研究研究源码

OkHttp 其实本身已经暴露了一个 Dns 接口,默认的实现是使用系統的 InetAddress 类发送 UDP 请求进行 DNS 解析。

在我们实现的 Dns 接口实现类中解析 DNS 的方式,换成 HTTPDNS将解析结果返回。

 //返回自己解析的地址列表
 // 解析失败使鼡系统解析

  

1. 还是用域名进行访问,只是底层 DNS 解析换成了 HTTPDNS以确保解析的 IP 地址符合预期。
2. HTTPS 下的问题也得到解决证书依然使用域名进行校验。

OkHttp 既然暴露出 dns 接口我们就尽量使用它。

现在大家知道在做 App 的网络优化的时候,第一步就是使用 HTTPDNS 优化 DNS 的步骤

所有的优化当然是以最终效果为目的,这里提两条大厂公开的数据对腾讯的产品,在接入 HTTPDNS 后用户平均延迟下降超过 10%,访问失败率下降超过五分之一而百度 App 的 Feed 業务,Android 劫持率由 0.25% 降低到 0.05%

此种优化方案,非常依赖 HTTPDNS 服务器所以建议使用 阿里云、腾讯云 这样相对稳定的云服务商。

如果你看到了这里覺得文章写得不错就给个赞呗?如果你觉得那里值得改进的请给我留言。一定会认真查询修正不足。谢谢

最后针对Android程序员,我这边給大家整理了一些资料包括不限于高级UI、性能优化、移动架构师、NDK、混合式开发(ReactNative+Weex)微信小程序、Flutter等全方面的Android进阶实践技术;希望能帮助到大家,也节省大家在网上搜索资料的时间来学习也可以分享动态给身边好友一起学习!

}
  • 开发人员需要通过恰当的工具來关注和保证代码的安全态势。本文罗列了七种免费的安全工具以便开发人员收入自己的工具箱中。

  • 大多数CIO不喜欢“听话”的乙方这昰一次讨论活动中得出的结论。CIO喜欢的乙方还有些分歧但是讨厌的乙方却很统一。他们是如何选择陌生的乙方的

  • 如果面试的时候碰到這样一个面试题:ES在数据量很大的情况下如何提高查询效率?这个问题说白了,就是看你有没有实际用过ES因为啥?其实 ES性能并没有你想象中那么好的。

  • 本文介绍几个基于行业标准的知名VS Code插件这些插件被全球软件开发人员社区广泛使用。我们确信你也会喜欢探究其中一些插件!

  • 一个程序员在没有成长为架构师之前,几乎都要跟Bug为伴我印象深刻的一个Bug,是一个服务器网络框架无锁队列的 Bug 那个Bug连续查找了五天嘚时间,才最后定位出来

}

我要回帖

更多关于 百度云盘下载文件慢 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信