5

で使用NSURLCacheしていAFNetworkingます。キャッシュは正常に機能しますが、応答が実際にキャッシュから取得されたかどうかを確認する方法はありません。キャッシュされたバージョンが利用可能かどうかを確認するには、次を使用します

[[NSURLCache sharedURLCache] cachedResponseForRequest:_request];

私のファイルのキャッシュされたバージョンを確認します。

私のサーバーは次のヘッダーを送信しています:

Cache-Control:public, must-revalidate, max-age=0
ETag:"317a405bf9f69346c1f0438736a3d02e"

これにより、基本的に、キャッシュされた応答がダウンロード直後に古くなることを確認できます。ただし、cachedResponseForRequest:実際には有効期限が切れていても、以前にキャッシュされたバージョンをディスクにロードします。

  • NSURLCache有効期限が切れない、または正しいヘッダーを送信していないなど?
  • ここで他に何か不足していますか?

編集

私も発信してみました

Expires: "Mon, 27 May 2013 14:34:50 GMT"

ヘッダーと応答は、既に期限切れになっていても、キャッシュから返されます。NSURLCache正しく動作していない気がします...

4

1 に答える 1

2

NSURLCache は、ほとんどの iOS ネットワーク API (NSURLConnection など) によって自動的に使用されます。ネットワーク要求を行う前に、NSURLCache オブジェクトをインスタンス化し、 [NSURLCache setSharedURLCache:] を使用してどこかに設定するだけです。

max-age=0 が設定されていても、ETag が提供されている場合、NSURLCache は、If-None-Match リクエスト ヘッダーが以前の ETag 値に設定された次のリクエストを送信できるように、レスポンスを保存する必要があります。サーバーが 304 で応答すると、キャッシュされた応答が返されます。

したがって、 cachedResponseForRequest: は、実際に有効かどうかに関係なく、キャッシュされた応答を返していると思います。

キャッシュを直接取得する必要はありません。すべて iOS によって透過的に管理されます。

于 2014-05-22T00:14:46.680 に答える