我正在使用 Cordova/Phonegap 构建一个 iOS 应用程序,它基本上有一个 UIWebView 并从外部资源加载我的网络应用程序。 (iOS6+)
此 Web 应用程序需要 450kb 的 HTML 才能运行,我希望在没有更改时缓存此文件。 (每隔一周更改一次)
为此,我在初始化期间在我的 AppDelegate 中设置了一个 NSURLCache:
NSURLCache *URLCache = [[NSURLCache alloc] initWithMemoryCapacity:4 * 1024 * 1024
diskCapacity:20 * 1024 * 1024
diskPath:nil];
[NSURLCache setSharedURLCache:URLCache];
加载应用程序后,文件现在正在缓存,我可以在 Library/Caches/APPName/fsCachedData 上找到它们。
我正在使用 CharlesProxy 查看请求,如果应用程序加载一次,所有重新加载都会返回 304,未修改,到该文件
问题来了
每次我打开iOS App,虽然文件在缓存文件夹中,但它会从服务器重新加载并保存最新版本; if-modified-since在打开后的第一个请求中没有设置为请求参数,而是后面的。
我不确定我是否需要明确要求 Xcode 从磁盘加载 NSURLCache,或者我没有正确设置它。
任何人都可以看到过程中的问题吗?
更多信息:
缓存控制是私有(private)的,max-age=31536000,必须重新验证。 NSURLRequest cachePolicy 是 NSURLRequestUseProtocolCachePolicy。
谢谢!
最佳答案
问题是由 CordovaLibrary 引起的。它有一个 CDVURLProtocol 和 CDVUserAgent,它们拦截请求,与现有信息冲突。
要解决此问题,您必须阻止 CDVUserAgent 设置 UserAgent,但这可能会影响对本地文件的限制。在我的例子中,源是从服务器检索的。
关于ios - 重新启动后 NSURLCache 未从磁盘加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21420254/