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数据。
- ASIHTTPRequest vs AFNetworking框架
- AFNetworking是否有后台支持?
- 如何调用本地图像文件并显示到imageviewcontroller
- 铛:错误:没有这样的文件或目录:ASIAuthenticationDialog.m
- 为什么我更喜欢NSURLConnection的ASIHTTPRequest从网上下载文件?
- 如何使用ASIHTTPRequest来跟踪上传/下载进度
- 通过HTTPClient工作时,ASIHTTPRequest Post请求失败
- AFNetworking – 如何设置超时时重试的请求?
- 新手卡住:ASIHTTPRequest – 没有已知的类方法select器“requestWithURL”