ASIHTTPRequest似乎总是cachingJSON数据

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

__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]; 

但是,尽pipe服务器中的JSON数据的内容发生了变化,但是获得的JSON数据仍旧保留原来的数据。

我使用networking浏览器检查数据,无论是在笔记本电脑和iPhone Safari浏览器。 当我在JSON更改后请求url时,它首先返回旧数据,但是如果我刷新页面,它将返回更新的数据。 但在应用程序中,ASIHTTPRequest总是返回旧数据。

我也尝试debuggingASIHTTPRequest代码,以查看是否使用了任何caching的数据。 但它似乎从来没有使用下载caching,因为它没有被设置。 它永远不会input[useDataFromCache]方法。

可能是什么问题呢? 我怎样才能强制ASIHTTPRequest检查是否有更新的数据在服务器上,并使其得到真正更新的JSON?

编辑

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

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

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

我怎样才能使它首先检查服务器是否修改数据,并检索它是否修改? 目前我得到的JSON数据作为从一个PHPurl的dynamic响应,所以没有文件,我可以检查数据的date。

什么可能是解决scheme?

问候,

鉴于你所说的一切,ASIHTTPRequest似乎不太可能caching响应。

所以,其他的东西一定是 – 在你和服务器之间似乎有一个caching代理服务器,这就是为什么设置Cache-Control有所作为的原因。

它可以是本地networking上的代理服务器,也可以是在您的ISP上,也可以在您使用的networking服务器前面。

根据ASIHTTPRequest的文档,调用该方法

 [[ASIDownloadCache sharedCache] clearCachedResponsesForStoragePolicy:ASICachePermanentlyCacheStoragePolicy]; 

将清除caching。 在发送请求之前调用这个方法,它会给你更新的JSON数据。