2012-02-12 10 views
0

ASIHTTPRequest APIを使用して、WebサイドからJSONデータを取得しています。私はデフォルトのキャッシュプロパティを変更せずに非同期要求を使用しています。次のようにコードがある:ASIHTTPRequestは常に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の両方でウェブブラウザを使用してデータを確認しました。 JSONの変更後にurlをリクエストすると、まず古いデータが返されますが、ページを更新すると更新されたデータが返されます。しかし、アプリケーションでは、ASIHTTPRequestは常に古いデータを返します。

また、キャッシュされたデータが使用されているかどうかを確認するためにASIHTTPRequestコードをデバッグしようとします。しかし、それは設定されていないので、ダウンロードキャッシュを使用しないようです。それは決して[useDataFromCache]メソッドに入りません。

何が問題なのですか? ASIHTTPRequestにサーバー上に更新されたデータがあるかどうかを確認して、実際に更新されたJSONを取得する方法を教えてください。

EDIT

は私がのCache-Controlヘッダを使用し、今私は、正しい更新JSONデータを取得します。次のようにコードがある:

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

しかし、私はいつものパフォーマンスを低下させるであろう、それが修正されていない場合でも、JSONを取得しようとする要求に今からだと思います。

データを変更したかどうかを最初に確認し、変更されているかどうかを調べるにはどうすればよいですか?現在、私はPHPのURLから動的応答としてJSONデータを取得するので、データの正確性をチェックできるファイルはありません。

解決策は何ですか?

よろしく、ASIHTTPRequestのマニュアルによると

答えて

1

ASIHTTPRequestが応答をキャッシュしているとは思われません。

だから、あなたとサーバーの間にキャッシュプロキシサーバーがあるように見えます。そのため、Cache-Controlを設定すると違いがあります。

ローカルネットワーク上のプロキシサーバーでも、使用しているWebサーバーの前にISPのコンピュータが存在する可能性もあります。

+0

ええ、私のネットワークにはプロキシサーバーがあります。 私が覚えているように、パブリックネットワークでアプリを使用しようとしましたが、これも古いデータが返されました。 しかし、データの最新性をチェックするとともにキャッシュポリシーを実行する方法をまだ理解できません。サーバ側のレスポンスヘッダにCache-Controlヘッダを付けるとうまくいくのでしょうか? yesの場合は、 '(ASIAskServerIfModifiedCachePolicy | ASIFallbackToCacheIfLoadFailsCachePolicy)'データキャッシュポリシーを使用できますか? – manuyavuz

+0

お寄せいただきありがとうございます。私たちは、サーバー側が実際に応答をキャッシュしていたことを認識しました。問題なく動作します。 – manuyavuz

0

、方法

[[ASIDownloadCache sharedCache] clearCachedResponsesForStoragePolicy:ASICachePermanentlyCacheStoragePolicy]; 

呼び出すと、キャッシュをクリアします。リクエストを送信する前にこのメソッドを呼び出すと、更新されたJSONデータが得られます。

+0

私はこれを試しました(また、セッションキャッシュを削除するために追加されました)。 '[[ASIDownloadCache sharedCache] clearCachedResponsesForStoragePolicy:ASICachePermanentlyCacheStoragePolicy]; [[ASIDownloadCache sharedCache] clearCachedResponsesForStoragePolicy:ASICacheForSessionDurationCacheStoragePolicy]; __unsafe_unretained ASIHTTPRequest * request = [ASIHTTPRequest requestWithURL:url]; ' これはうまくいかなかった。ASIHTTPキャッシングについては、ドキュメンテーションに従ってデフォルトでキャッシュを使用しないためではないと思います。しかし、私はこの奇妙な行動の他の理由を見つけることができません。 – manuyavuz

関連する問題