Objective-C–ASIHTTPRequest缓存,即使有新内容可用

Objective-C–ASIHTTPRequest缓存,即使有新内容可用,objective-c,ios,asihttprequest,Objective C,Ios,Asihttprequest,我正在使用ASIHTTPRequest从internet下载数据。它有一个漂亮的缓存功能,你可以打开它来缓存下载的数据。到现在为止,一直都还不错。但是,当我将新数据上传到我的Web服务器并尝试再次下载时,我希望它不会使用缓存,因为数据是新的且经过修改的。但即便如此,它仍将使用缓存 我正在使用以下代码处理我的请求: [ASIHTTPRequest setDefaultCache:[ASIDownloadCache sharedCache]]; // When you turn shouldRes

我正在使用ASIHTTPRequest从internet下载数据。它有一个漂亮的缓存功能,你可以打开它来缓存下载的数据。到现在为止,一直都还不错。但是,当我将新数据上传到我的Web服务器并尝试再次下载时,我希望它不会使用缓存,因为数据是新的且经过修改的。但即便如此,它仍将使用缓存

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

[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的不同标题。第一个图像是一个没有缓存内容的新下载。第二张图片我上传了新的和修改过的数据

第一:

第二:

EDIT2:添加日志


我期望的调试输出远不止这些,我不知道为什么您得到的那么少

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


请尝试在ASIHTTPRequest.m中的useDataFromCache上设置断点,以开始并使用CachedDataForRequest,尤其是从readResponseHeaders调用时。

也许ASIHTTPRequest会利用ETag来确定内容是否已更改,而您的服务器在内容更改时未更改ETag?请参阅:使用空缓存为初始获取收集http跟踪,使用charlesproxy等工具为错误缓存的请求收集另一个跟踪,然后将数据编辑到您的问题中。您是否在模拟器中运行?我认为模拟器本身可能会使用缓存。我遇到了一个问题,即在模拟器中运行时,即使我将ASIHTTPRequest上的缓存策略显式设置为AsidNotReadFromCachePolicy | AsidNotWriteToCachePolicy,它仍返回一个旧结果。不过,这种行为并没有发生在设备上。@Joseph:我现在已经用图像进行了更新,请在新选项卡中打开它们以查看完整大小。@Joe Ibanez:这种情况也发生在设备上:我真的不知道在调试中应该查找什么?你能给我一个ASIHTTPRequest正在正确缓存的URL吗?在useDataFromCache上设置一个断点-在你的情况下,无论是谁调用的,都是错误的,因此当断点被命中时,请上升一个级别,看看满足了什么条件,并导致调用useDataFromCache。