在开发过程中遇到前端改变图片文字,客户端没有实时刷新出来,抓包发现也没有请求网页相关接口。由于不懂后端的知识,折腾了很久,网上也查找了很多都说需要清除缓存。
这是在网上查找的iOS9以上清除缓存方法
NSArray * types = @[WKWebsiteDataTypeMemoryCache,WKWebsiteDataTypeDiskCache];
NSSet*websiteDataTypes = [NSSetsetWithArray:types];
NSDate *dateFrom = [NSDate dateWithTimeIntervalSince1970:0];
[[WKWebsiteDataStore defaultDataStore] removeDataOfTypes:websiteDataTypes modifiedSince:dateFrom completionHandler:^{
}];
不建议使用上述方法,会浪费用户流量,除非用户手动清除缓存。其实主要原因是后端网页设置的问题,通过head请求获取接口返回信息如下:
{ Status Code: 200, Headers { "Cache-Control" = ( public ); "Content-Length" = ( 5759 ); "Content-Type" = ( "text/html; charset=utf-8" ); Date = ( "Fri, 10 Apr 2020 09:59:03 GMT" ); Expires = ( "Fri, 10 Apr 2020 10:29:02 GMT" ); Server = ( "Microsoft-IIS/7.5" ); "X-AspNet-Version" = ( "4.0.30319" ); "X-Powered-By" = ( "ASP.NET" );} }
上面标粗的是关键,通过测试发现WKWebView是否通过缓存取数据还是重新请求接口取决于Expires,如上就是缓存时效性是30分钟,想要实时刷新,可以让后端不返回这个字段或者这个过期事件设置短一些,例如1分钟。建议静态网页可以设置长时间,需要实时刷新的建议后端不要设置这个字段,以免客户端无法实时显示。
网友评论