私はASIHTTPRequest
を使ってインターネットからデータをダウンロードしています。それはあなたがダウンロードされたデータをキャッシュするようにオンにすることができるきれいなキャッシュ機能を持っています。ここまでは順調ですね。しかし、私のウェブサーバに新しいデータをアップロードして再びダウンロードしようとすると、ではなく、はデータが新しく変更されているのでキャッシュを使用することを期待しています。しかしそれでもなおはまだキャッシュを使用します。Objective-C - 新しいコンテンツが利用可能な場合でもASIHTTPRequestキャッシュ
私は私の要求のために次のコードを使用しています:HTTPScoop異なるヘッダを表示するために
2枚の画像:
[ASIHTTPRequest setDefaultCache:[ASIDownloadCache sharedCache]];
// When you turn shouldRespectCacheControlHeaders off, the cache will store responses even if the server
// has explictly asked for them not be be cached (eg with a cache-control or pragma: no-cache header)
[[ASIDownloadCache sharedCache] setShouldRespectCacheControlHeaders:NO];
NSURL *officesUrl = [NSURL URLWithString:@"http://www.example.com/example.json"];
ASIHTTPRequest *officesRequest = [ASIHTTPRequest requestWithURL:officesUrl];
[officesRequest setDefaultResponseEncoding:NSUTF8StringEncoding];
[officesRequest addRequestHeader:@"Cache-Control" value:@"no-cache"];
// Always ask the server if there is new content available,
// If the request fails, use data from the cache even if it should have expired.
[officesRequest setCachePolicy:ASIAskServerIfModifiedCachePolicy|ASIFallbackToCacheIfLoadFailsCachePolicy];
[officesRequest setCacheStoragePolicy:ASICachePermanentlyCacheStoragePolicy];
[officesRequest setDelegate:self];
[officesRequest startAsynchronous];
EDITを。最初の画像は、キャッシュされたコンテンツのない新鮮なダウンロードです。 2番目の画像私は新しいデータと変更されたデータをアップロードしました。
まず:
第二:
EDIT2:追加のログ
https://gist.github.com/1139351
おそらく、ASIHTTPRequestはETagを使ってコンテンツが変更されたかどうかを判断し、サーバーはコンテンツの変更時にETagを変更しないでしょうか?参照:http://en.wikipedia.org/wiki/HTTP_ETag –
最初のフェッチ(空のキャッシュ)のためのhttpトレースと、charlesproxyのようなツールを使用して間違ってキャッシュするリクエストの別のトレースを収集し、あなたの質問。 – JosephH
万が一、シミュレータを起動していますか?私は、シミュレータ自体がキャッシュを使用するかもしれないと思う。 ASIHTTPRequestのキャッシュポリシーを明示的に(ASIDoNotReadFromCacheCachePolicy | ASIDoNotWriteToCacheColicyPolicy)に設定していたにもかかわらず、シミュレータで実行中の問題が発生しましたが、古い結果が返されていました。しかし、この動作はデバイスでは発生しませんでした。 –