每天记录一个小知识点,今天看下NSURLRequestCachePolicy
缓存是指代理客户端本地或代理服务器磁盘内保存的资源副本,利用缓存可以减少对原服务器的访问,减少通信时间和通信流量。
NSURLRequestCachePolicy
iOS网络中有一个专门类NSURLRequestCachePolicy
表示与缓存交互的策略
NSURLRequestUseProtocolCachePolicy
使用协议中定义的缓存策略。
- 如果request缓存不存在,就向源服务器请求数据
- 如果缓存存在,response不强制要求每次都重新验证,缓存response又没有过期;满足前面三个要求,就从本地缓存读取数据。
- 如果缓存过期 or 要求强制验证,网络系统向源服务器做一个HEAD request,确定资源是否改变,如果改变,向源服务器请求数据,否则依然使用缓存。
NSURLRequestReloadIgnoringLocalCacheData
忽略本地缓存,向代理服务器或源服务器请求数据
NSURLRequestReloadIgnoringLocalAndRemoteCacheData
忽略本地缓存和代理服务器缓存,向源服务器发起请求
NSURLRequestReturnCacheDataElseLoad
如果存在缓存,忽略使用期限,直接使用缓存,否则使用网络加载数据。
NSURLRequestReturnCacheDataDontLoad
禁止网络请求,只使用本地缓存,如果缓存不存在,request失败
NSURLRequestReloadRevalidatingCacheData
如果原始源可以验证,使用缓存,否则发起网络请求。
HTTP缓存策略
缓存有效期
即便缓存服务器内有资源,也不能保证缓存资源的有效性,这涉及到缓存资源的有效性。
当遇上源服务器缓存资源更新时,如果还是使用不变的缓存,用户就会使用更新前的“旧”资源了
即使存在缓存,也会因为客户端的要求,缓存的有效期等因素,向源服务器确认资源的有效性,若判断缓存失效,缓存服务器会再次向源服务器请求"新"数据
客户端缓存
缓存不仅可以存在代理服务器内,还可以存在客户端磁盘中,以iOS为例,客户端临时网络缓存在Library/HTTPStorages中,客户端缓存如果有效,就不用再向服务端请求请求相同资源了,可以直接从本地磁盘内读取,当判定缓存过期后,会向源服务器确认资源的有效性,如果判定缓存失效,APP会再次请求新资源
关键知识点:代理服务器(缓存服务器)、HEAD方法