我正在使用 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/