NSURLRequest缓存策略

276 阅读2分钟

每天记录一个小知识点,今天看下NSURLRequestCachePolicy

缓存是指代理客户端本地代理服务器磁盘内保存的资源副本,利用缓存可以减少对原服务器的访问,减少通信时间和通信流量。

NSURLRequestCachePolicy

iOS网络中有一个专门类NSURLRequestCachePolicy表示与缓存交互的策略
NSURLRequestUseProtocolCachePolicy 使用协议中定义的缓存策略。

  1. 如果request缓存不存在,就向源服务器请求数据
  2. 如果缓存存在,response不强制要求每次都重新验证,缓存response又没有过期;满足前面三个要求,就从本地缓存读取数据。
  3. 如果缓存过期 or 要求强制验证,网络系统向源服务器做一个HEAD request,确定资源是否改变,如果改变,向源服务器请求数据,否则依然使用缓存。 image.png

NSURLRequestReloadIgnoringLocalCacheData忽略本地缓存,向代理服务器源服务器请求数据

NSURLRequestReloadIgnoringLocalAndRemoteCacheData忽略本地缓存和代理服务器缓存,向源服务器发起请求

NSURLRequestReturnCacheDataElseLoad如果存在缓存,忽略使用期限,直接使用缓存,否则使用网络加载数据。

NSURLRequestReturnCacheDataDontLoad 禁止网络请求,只使用本地缓存,如果缓存不存在,request失败

NSURLRequestReloadRevalidatingCacheData 如果原始源可以验证,使用缓存,否则发起网络请求。

HTTP缓存策略

缓存有效期

即便缓存服务器内有资源,也不能保证缓存资源的有效性,这涉及到缓存资源的有效性。
当遇上源服务器缓存资源更新时,如果还是使用不变的缓存,用户就会使用更新前的“旧”资源了
即使存在缓存,也会因为客户端的要求,缓存的有效期等因素,向源服务器确认资源的有效性,若判断缓存失效,缓存服务器会再次向源服务器请求"新"数据

image.png

客户端缓存

缓存不仅可以存在代理服务器内,还可以存在客户端磁盘中,以iOS为例,客户端临时网络缓存在Library/HTTPStorages中,客户端缓存如果有效,就不用再向服务端请求请求相同资源了,可以直接从本地磁盘内读取,当判定缓存过期后,会向源服务器确认资源的有效性,如果判定缓存失效,APP会再次请求新资源

image.png

关键知识点:代理服务器(缓存服务器)、HEAD方法