【发布时间】:2011-11-05 03:35:35
【问题描述】:
我正在使用ASIDownloadCache 来缓存下载文件,下面的代码是我如何设置请求和下载缓存。 `request = [super initWithURL:url1]; [请求 setTimeOutSeconds:50];
ASIDownloadCache *cache = [[ASIDownloadCache alloc] init] ;
[cache setStoragePath:[path stringByAppendingPathComponent:@"resource"]];
[cache setShouldRespectCacheControlHeaders:NO];
self.myCache = cache;
[cache release];
[request setDownloadCache:self.myCache];
//[self setSecondsToCache:60*60*24*30];
[request setCachePolicy:ASIAskServerIfModifiedCachePolicy];
[request setCacheStoragePolicy:ASICachePermanentlyCacheStoragePolicy];
` 我的问题是,当 url 的标头被修改时,ASIDownloadCache 仍在使用缓存的数据。为什么?有人知道答案吗?
修改前的那个url的头部如下:
HTTP/1.1 200 正常 服务器:Apache/2.2 缓存控制:公共 内容类型:文本/html;字符集=UTF-8 日期:2011 年 11 月 7 日星期一 08:26:15 GMT 过期:星期一,2011 年 11 月 7 日 08:23:35 GMT 语用:公共 传输编码:分块 电子标签:1320654215 连接:保持活动 最后修改时间:2011 年 11 月 7 日星期一 08:23:35 GMT
修改后的header如下:
HTTP/1.1 200 正常 服务器:Apache/2.2 缓存控制:公共 内容类型:文本/html;字符集=UTF-8 日期:2011 年 11 月 7 日星期一 08:28:49 GMT 过期:星期一,2011 年 11 月 7 日 08:28:32 GMT 语用:公共 传输编码:分块 电子标签:1320654512 连接:保持活动 最后修改时间:2011 年 11 月 7 日星期一 08:28:32 GMT
即使 Last-Modified 字段不一样,它仍然使用缓存的数据。
【问题讨论】:
-
使用 charlesproxy 或类似工具来捕获 ASIHTTPRequest 正在发送的请求以及来自服务器的响应,并将其添加到您的问题中。
-
表头都列出来了,是不是表头有问题?
-
它们看起来不错;我认为您需要单步执行代码并了解它决定使用缓存数据的原因。 readResponseHeaders 中的断点并逐步执行 canUseCachedDataForRequest
-
我想我找到了问题,当我得到标头时,请求还没有完成。即使标头不同,它也会检查请求是否已完成。所以我认为我应该编写自己的缓存。谢谢@JosephH。
标签: objective-c asihttprequest