1

AFNetworkingを使用してTornadoを実行しているサーバーに接続するiOSアプリを構築しています。Cache-Control: private, max-age=900サーバーは、応答にヘッダーを含めます。ローカルマシンでサーバーを実行している場合、アプリからの繰り返しのリクエストでサーバーが受信するリクエストがないため、AFNetworkingはキャッシュされた値を使用していることがわかります。同じTornadoサーバーをテストマシンにデプロイすると、アプリからの各リクエストは、キャッシュされた値を無視して、サーバーでリクエストを受信します。

2つの設定の唯一の違いは、サーバーのURLと、ローカルホストがHTTPを使用しているのに対し、テストサーバーはHTTPS接続を介してアクセスされるという事実です。HTTPSはAFNetworkingによるキャッシュに影響しますか?影響を受ける場合、AFNetworkingにキャッシュヘッダーを尊重させるにはどうすればよいですか?

4

1 に答える 1

6

役立つかどうかはわかりませんが、とにかくここにあります。AFNetworkingは、NSURLCache共有キャッシュを使用するNSURLConnectionを使用します。AFNetworkingはキャッシュに関して完全に透過的であり、特定のことは何もしません。私のリクエストはhttpsで、キャッシュは問題なく実行されていました。

Cache-Control応答ディレクティブを使用すると、オリジンサーバーは応答のデフォルトのキャッシュ機能をオーバーライドできます。private応答メッセージのすべてまたは一部が単一のユーザーを対象としており、共有キャッシュによってキャッシュされてはならないことを示します。これにより、オリジンサーバーは、応答の指定された部分が1人のユーザーのみを対象としており、他のユーザーによる要求に対する有効な応答ではないことを示すことができます。プライベート(非共有)キャッシュは、応答をキャッシュしてもよい[MAY]。 http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.1

許容できる場合は、ポリシーをパブリックに変更してみてください。アプリからの応答に関するヘッダーをログに記録し、cache.dbを調べて、実際に何かがそこにキャッシュされているかどうかを確認します。

共有キャッシュを構成してみてください-

int cacheSizeMemory = 1*1024*1024; // 4MB
int cacheSizeDisk = 100*1024*1024; // 100MB
[[NSURLCache sharedURLCache] setMemoryCapacity:cacheSizeMemory];
[[NSURLCache sharedURLCache] setDiskCapacity:cacheSizeDisk];

これについてのもう1つの良い読み物はここ http://petersteinberger.com/blog/2012/nsurlcache-uses-a-disk-cache-as-of-ios5/

于 2012-10-03T01:09:57.643 に答える