项目排查 问题

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里会话时效的时候一定要注意这个,我这次的坑也是被这个机制折腾的死去活来。。。。

上一篇下一篇

猜你喜欢

热点阅读