【问题标题】:Why is ASIDownloadCache cached data always be used?为什么总是使用 ASIownloadCache 缓存数据?
【发布时间】: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


【解决方案1】:

我想我喜欢这个问题。当我得到标头时,请求尚未完成。即使标头不同,它也会检查请求是否已完成。所以我认为我应该编写自己的缓存。

【讨论】:

    【解决方案2】:

    答案在问题中:

    [cache setShouldRespectCacheControlHeaders:NO];
    

    你应该使用

    [cache setShouldRespectCacheControlHeaders:YES];
    

    让缓存尊重标头信息。

    希望对你有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-12
      • 1970-01-01
      • 2014-04-19
      • 2015-11-30
      • 2012-08-27
      • 1970-01-01
      • 1970-01-01
      • 2012-08-22
      相关资源
      最近更新 更多