AFNetworking的https和缓存

一、AFNetworking的组成:

1、AFURLSessionManager,AFHTTPSessionManager继承自AFURLSessionManager,处理主要的业务逻辑
2、Serialization请求和响应序列化,请求参数header、parameters的拼接,返回值序列化的方式JSON和XML
3、AFNetworkReachabilityManager网络监测
4、AFSecurityPolicy安全认证https
5、UIKit是UI的扩展,便于外层调用方法

二、https

https,可以防中间人攻击,是非对称加密(RSA加密算法,通过私钥算出公钥,通过公钥无法算出私钥,很耗时,只有在验证https时使用非对称加密,连接建立完成后使用对称加密;对称加密是客户端和服务端使用同一个秘钥对数据进行加密和解密)

1、https流程:
1)clientHello:发起请求,发送客户端SSL版本信息、随机数random c、支持的加密算法,通过TCP发送给服务端
2)服务端收到后返回服务端SSL版本信息、随机数及服务器的公钥(用来生成非对称加密)
3)客户端拿到公钥验证服务器返回的证书serverTrust是否合法
4)证书合法后客户端发送对称加密方案给服务端选择
5)serverHello-serverDone,服务端选取加密程度比较高的算法来加密并将加密算法返回给客户端,同时返回服务端随机数random s
6)客户端收到加密方式后产生随机码Pre-master(预主秘钥),由random c + random s + Pre-master生成对称加密的秘钥发给服务端
7)服务端使用私钥解密,获得对称加密秘钥
8)使用对称加密进行通讯

2、NSURLSession认证流程:
1)客户端发起get请求NSMutableURLRequest,收到401错误说明需要用户信息
2)服务端返回信息要求客户端认证
3)客户端的didReceiveChallenge代理方法使用默认方式DefaultHandling处理服务端需要的用户信息,可以通过block自定义处理,默认处理方式是验证服务器证书是否是信任证书,通过验证成功的证书创建NSURLCredential并设置证书挑战,验证不成功就取消挑战,返回NSURLCredential给服务端
4)服务端收到NSURLCredential验证通过后返回200成功,将数据返回给客户端
NSURLCredential
①通过用户名密码创建证书,一般用于401错误的认证或需要用户名密码的认证;
②从钥匙串取得一个客户端证书来创建证书,一般用于服务端要认证客户端的情况,双向认证;
③initWithTrust,通过服务端传回的SecTrustRef(包含待验证的证书和支持的验证方法等)创建证书,一般用于客户端需要验证服务端身份的情况

3、NSURLAuthenticationChallenge:
1)NSURLProtectionSpace包含服务器信息主机、协议、SSL、随机数等,其中authenticationMethod是授权方式,用来判断当前是否要信任证书
2)NSURLCredential存储使用的证书,使用serverTrust初始化,serverTrust里包含已经验证的证书,SecTrustRef是待验证的对象,包含要验证的证书以及支持验证的方法,是否验证自签证书,是否验证主机名domain,SecTrustEvaluate证书校验函数,证书链、递归验证,result是Proceed说明取得了用户认可,
自建证书:验证serverTrust,遍历当前证书是否合法

4、总结:
握手过程:验证服务端和客户端的身份,协商后续传输数据使用的秘钥,使用非对称加密;
数据传输过程:使用协商好的秘钥进行通讯,通讯过程使用对称加密

三、缓存(图片缓存)

AFAutoPurgingImageCache,自动清理缓存,设置图片缓存临界值,到达临界值后会对图片进行清理,清理到已设置的剩余内存大小为止。中间需要计算图片内存大小,然后比对临界值进行清理操作
1、AFImageCache协议解耦实现图片清理,方法是addImage、removeImage、removeAllImages,实现对应的协议方法即可自定义清理方式
2、AFImageRequestCache协议,根据网络下载的图片进行清理
3、属性:
1)memoryCapacity图片缓存大小;
2)preferredMemoryUsageAfterPurge清理缓存后期望剩余的内存大小;
3)memoryUsage内存使用大小;
4、AFCachedImage是要缓存的图片类,缓存UIImage对象存储在内存缓存中,在init方法里计算图片大小和保存图片的最近访问时间,计算方法是每个像素点*每个图片宽每个图片高,每个像素点由4个不同的向量组成分别是RGBA
5、
AFAutoPurgingImageCache*初始化方法init设置了100M的内存空间,60M的剩余内存空间
1)存储图片需要先查询是否之前已经存储过,存储过的需要先减去已经存储的图片大小,图片是以indentifier标记查找,然后加上当前图片使用的内存大小;
2)清理图片是先对图片进行排序,然后遍历清理图片,同时比较已经清理的内存与需要达到的内存是否符合,满足条件后停止清理

你可能感兴趣的:(AFNetworking的https和缓存)