objective-c - ASIHTTPRequest 似乎总是缓存 JSON 数据

标签 objective-c ios caching asihttprequest

我正在使用 ASIHTTPRequest API 从 Web 端获取一些 JSON 数据。我使用异步请求而不更改默认缓存属性。代码如下:

__unsafe_unretained ASIHTTPRequest * request = [ASIHTTPRequest requestWithURL:url];

request.timeOutSeconds = 30;
[request setCompletionBlock:^(void)
 {
     NSString *str = [request responseString];
     /*
     *
     *
     */
 }];
[request setFailedBlock:^(void)
 {
     NSLog(@"status: %@",[request responseStatusMessage]);
     NSLog(@"%@ : %@",[request url],[[request error] debugDescription]);         
 }];
[request startAsynchronous];

但是,虽然服务器中的JSON数据内容发生了变化,但获取到的JSON数据仍然是旧的。

我使用网络浏览器在笔记本电脑和 iPhone safari 上检查了数据。当我在 JSON 更改后请求 url 时,它首先返回旧数据,但如果我刷新页面,它会返回更新的数据。但在应用程序中,ASIHTTPRequest 始终返回旧数据。

我还尝试调试 ASIHTTPRequest 代码,以查看是否使用了任何缓存数据。但它似乎从不使用下载缓存,因为它尚未设置。它永远不会进入 [useDataFromCache] 方法。

可能是什么问题?如何强制ASIHTTPRequest检查服务器上是否有更新的数据,并使其获得真正更新的JSON?

编辑

我使用了 Cache-Control header ,现在我得到了正确的更新后的 JSON 数据。代码如下:

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

但是,我认为从现在开始,请求将始终尝试检索 JSON,即使它没有被修改,这会降低性能。

怎样才能让服务器先检查数据是否被修改,如果被修改则检索出来?目前,我从 php url 获取 JSON 数据作为动态响应,因此没有文件可以检查数据的最新情况。

解决办法是什么?

问候,

最佳答案

鉴于您所说的一切,ASIHTTPRequest 似乎不太可能缓存响应。

因此,必须有其他东西 - 似乎您和服务器之间有一个缓存代理服务器,这就是设置 Cache-Control 会产生影响的原因。

它可能是您本地网络上的代理服务器,也可能位于您的 ISP 处,也可能位于您正在使用的 Web 服务器前面。

关于objective-c - ASIHTTPRequest 似乎总是缓存 JSON 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9251867/

相关文章:

iOS Swift 如何为任何语言环境设置没有年份的 DateFormatter?

java - 第一个异常不是 PropagatedCacheException

caching - 执行 SET {Key} 超时,inst : 0, mgr : Inactive, 队列 : 2, qu=1, qs=1, qc=0, wr=1/1, in=0/0

java - 使用 Spring、Hibernate 和 Ehcache 缓存整个数据库

iphone - 这个 Obj-C "unrecognized selector sent to instance"异常表示什么?

ios - UISearchBar barColor 不匹配 UINavigationBar

objective-c - 如何在 Objective-C 中添加 QLPreviewController 作为 subview

iPhone iOS 如何显示应用程序中存储的照片的幻灯片?

ios - 在 iOS 中使用 Swift 更改 UIAlertAction 的 UIAlertController 按钮标题的字体大小

objective-c - 将 NSURLConnecion 委托(delegate)与 NSURLConnection +sendAsynchronousRequest 一起使用