NSURLRequestCachePolicy:顾名思义,是为了与cached responses确定交互策略的枚举,具体枚举值如下:
typedef enum NSURLRequestCachePolicy : NSUInteger {
NSURLRequestUseProtocolCachePolicy = 0,
NSURLRequestReloadIgnoringLocalCacheData = 1,
NSURLRequestReloadIgnoringLocalAndRemoteCacheData = 4,
//NSURLRequestReloadIgnoringCacheData = NSURLRequestReloadIgnoringLocalCacheData,
NSURLRequestReturnCacheDataElseLoad = 2,
NSURLRequestReturnCacheDataDontLoad = 3,
NSURLRequestReloadRevalidatingCacheData = 5
}NSURLRequestCachePolicy;
我们的缓存策略会在NSURLRequest和NSURLProtocol体现,如果你想对cached responses做自定义的处理,需要在这两个类进行操作; 对于用户来说,则会造成不同的体验
注意:只有响应http和https的请求会被缓存,其他的协议需要去自定义。
简短的概括:
1、如果没有缓存,会直接从后台请求数据
2、如果没必要每次重新验证cache,且cache还是新鲜的(几天之内,几小时?的数据),返回cache response
3、如果cache是不新鲜的,或者需要每次重新验证cache,会发送Head请求到源数据判断cache是否被改变。如果改变了,去后端请求,没有改变则返回cache response
NSURLRequestUseProtocolCachePolicy:默认策略,具体的缓存逻辑和协议的声明有关,如果协议没有声明,不需要每次重新验证cache。 如果请求协议头为no-cache,则表现为直接从后台请求数据
NSURLRequestReloadIgnoringLocalCacheData:忽略本地缓存,直接从后台请求数据
NSURLRequestReloadIgnoringLocalAndRemoteCacheData:忽略本地缓存数据、代理和其他中介的缓存,直接从后台请求数据
NSURLRequestReturnCacheDataElseLoad:优先从本地拿数据,且忽略请求生命时长和过期时间。但是如果没有本地cache,则请求源数据
NSURLRequestReturnCacheDataDontLoad:只从本地拿数据
NSURLRequestReloadRevalidatingCacheData:每次必须重新验证cache