Objective-C - 即使有新内容,ASIHTTPRequest也会缓存

时间:2011-08-10 18:12:52

标签: objective-c ios asihttprequest

我正在使用ASIHTTPRequest从互联网上下载数据。它有一个漂亮的缓存功能,您可以打开它,以便缓存下载的数据。到现在为止还挺好。但是当我将新数据上传到我的网络服务器并尝试再次下载时,我希望使用缓存,因为数据是新的并且已经修改。但即便如此,仍然会使用缓存。

我正在使用以下代码来处理我的请求:

[ASIHTTPRequest setDefaultCache:[ASIDownloadCache sharedCache]];

// When you turn shouldRespectCacheControlHeaders off, the cache will store responses even if the server 
// has explictly asked for them not be be cached (eg with a cache-control or pragma: no-cache header)
[[ASIDownloadCache sharedCache] setShouldRespectCacheControlHeaders:NO];

NSURL *officesUrl = [NSURL URLWithString:@"http://www.example.com/example.json"];
ASIHTTPRequest *officesRequest = [ASIHTTPRequest requestWithURL:officesUrl];

[officesRequest setDefaultResponseEncoding:NSUTF8StringEncoding];

[officesRequest addRequestHeader:@"Cache-Control" value:@"no-cache"];

// Always ask the server if there is new content available, 
// If the request fails, use data from the cache even if it should have expired.
[officesRequest setCachePolicy:ASIAskServerIfModifiedCachePolicy|ASIFallbackToCacheIfLoadFailsCachePolicy];

[officesRequest setCacheStoragePolicy:ASICachePermanentlyCacheStoragePolicy];

[officesRequest setDelegate:self];

[officesRequest startAsynchronous];

修改

两张图片显示来自HTTPScoop的不同标头。第一张图片是全新下载,没有缓存内容。第二张图片我上传了新的和修改过的数据。

首先:

enter image description here

第二

enter image description here

EDIT2 :添加了日志

https://gist.github.com/1139351

1 个答案:

答案 0 :(得分:0)

我期待更多的调试输出,我不知道你为什么这么少。

我认为你只需要逐步完成响应处理,看看它为什么决定缓存版本可以使用。代码非常容易理解。

尝试在ASIHTTPRequest.m中的useDataFromCache上设置一个断点,以canUseCachedDataForRequest开头,特别是从readResponseHeaders调用时。