iOS之webView加载
2018-12-14 本文已影响0人
喵洛
最近在开发过程中发现一个问题,我客户端明明已经发送了web的request请求,为啥界面的内容和数据没有更新?后来查看文档、抓包看数据以及服务端的配合终于发现 问题所在了:缓存机制!!!
做iOS开发的都知道,客户端webView有缓存机制,会缓存css、js、html等静态资源,减少不必要的请求和下载,下面我简单的介绍下客户端URLRequest的缓存策略。
typedef NS_ENUM(NSUInteger, NSURLRequestCachePolicy)
{
NSURLRequestUseProtocolCachePolicy = 0,
NSURLRequestReloadIgnoringLocalCacheData = 1,
NSURLRequestReloadIgnoringLocalAndRemoteCacheData = 4, // Unimplemented
NSURLRequestReloadIgnoringCacheData = NSURLRequestReloadIgnoringLocalCacheData,
NSURLRequestReturnCacheDataElseLoad = 2,
NSURLRequestReturnCacheDataDontLoad = 3,
NSURLRequestReloadRevalidatingCacheData = 5, // Unimplemented
};
NSURLRequestUseProtocolCachePolicy
默认的缓存策略,其行为是由协议指定的针对该协议最好的实现方式。关于该策略的介绍,篇后详细说明。
NSURLRequestReloadIgnoringCacheData
从服务端加载数据,完全忽略缓存。
NSURLRequestReturnCacheDataElseLoad
使用缓存数据,忽略其过期时间;只有在没有缓存版本的时候才从源端加载数据。
NSURLRequestReturnCacheDataDontLoad
只使用cache数据,如果不存在cache,请求失败;用于没有建立网络连接离线模式
一般情况下,我们基本都是使用第一个(NSURLRequestUseProtocolCachePolicy),这个策略是根据服务端设置的缓存时间来控制客户端web的缓存时间,如果服务端控制缓存的时间是5分钟,那么客户端在5分钟之内加载这个url的时候就不会再次发起request请求静态资源。
所以,在做web里会话时效的时候一定要注意这个,我这次的坑也是被这个机制折腾的死去活来。。。。