Android HttpClient文件下载

本文详细介绍了在Android中使用HttpClient进行文件下载时的基础概念,包括域名解析、HTTPS加密以及调试工具的使用。在响应头部分,讲解了Content-Encoding、Content-Length、Transfer-Encoding和Accept-Ranges等关键字段。在踩坑记录中,重点讨论了SNI问题、断点续传的实现、chunked与ContentLength的冲突以及gzip压缩的问题,并给出了相应的解决方案。
摘要由CSDN通过智能技术生成

临近上线,运维布置了测试、预发布、正式环境,几乎常见的下载方式都碰上了,踩过一个又一个坑,闲下来总结一下吧。这里用的是android-async-http

1. 基础概念

1.1 域名、DNS

域名即我们常说的网址前半部分,因为服务器IP地址难记而出的解决方案。我们发起一个请求时,首先就要把域名转换成对应的ip地址。这一步能做很多文章,因为这个对应关系是可被篡改的。比如

  • 我们现有的所有操作系统,其找这个对应关系的优先级首先都是找本地hosts文件(windows路径是C:\Windows\System32\drivers\etc\hosts,其他基本为/etc/hosts),基于此我们就可以简单的在文件里配置一些好记的域名映射到我们的内部服务器,比如package.xxx.top build.client.com download.client.com
  • 如果在hosts里没找到映射关系,下一步就该去问我们配置的dns服务器了,手机wifi、电脑、路由器只要改成手动获取IP,基本都可以设置这个服务器地址。像我们内网有非技术时,搭建一个DNS服务器来做上面的自定义域名映射就很有必要
  • 全世界这么多域名,买了一个或者修改了映射怎么告知其他所有人我这域名是对应哪个IP呢,这就有我们说的9个根服务器,我们去dns服务器找映射时,如果它在本地缓存没有,那就会去它上级dns找,上级也没有就继续往上,一直到根服务器。我们在阿里云或万网买了或修改了域名映射的IP后,基本都会上报更新到根服务器或某级DNS服务器,然后才能看到改变。
  • 全球通网的多了之后,就会发现不同地区访问某台服务器会太卡了,这时域名商就想出了个法子,叫CDN(内容分发网络)。你们不都是要来问域名商这个域名是到哪个IP吗?它就看你是哪个地区的,返回给你个近点的IP,这个IP是域名商自己的服务器,它把你服务器的资源缓存起来了。别人来请求的时候,第一次它找不到,会去你自己的实际服务器(称之为源站)要(这过程称之为回源),第一次之后它就会缓存起来,下次再请求就直接给缓存了。所以开了CDN的第一次访问下载慢是正常的

1.2 HTTPS

HTTP是明文传输的,随着对安全性的需求越来越高,现在网站基本都开始使用起HTTPS了。HTTPS是在HTTP基础上,加了TLS/SSL协议进行加密传输。客户端从DNS服务器或hosts拿到服务器IP后,建立连接三次握手时,服务器会返回域名的证书给客户端,客户端能从中解析出证书链,看其根证书是否为内置的可信组织颁发且未过期,客户端校验后发送自己公钥给服务器,之后传输用非对称加密,即彼此以自己的私钥加密,对方用握手接受到的公钥进行解密。加解密算法也是在握手时协商随机确定。
目前微信小游戏和

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lyzz0612

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值