10

私のサーバーは、キャッシング サポートのために etag ヘッダー要素を設定しています。

iOS (6.1.4) アプリケーションは、ネイティブ NSURLConnection クラスを使用して XML 要求をサーバーに送信しています

サーバーがヘッダーに設定された etag を含む応答を初めて送信するとき

iOS アプリがまったく同じ要求をサーバーに送信している場合、サーバー ログで、if-none-match ヘッダーが NSURLConnection によって埋められていないことがわかります。

...そして、サーバーは304ではなく200で応答しています

リクエストに使用されるキャッシュ ポリシーは次のとおりです。

[request setCachePolicy:NSURLRequestReturnCacheDataElseLoad];

NSURLCache は次のように初期化されます

[[NSURLCache sharedURLCache] setMemoryCapacity:1024*1024*10];

私の質問: - NSURLConnection が「if-none-match」ヘッダー フィールドを設定しなかったのは正常ですか? - このヘッダー フィールドを自分で設定する必要がありますか? (キャッシュから応答を取得し、etag 値を読み取り、要求ヘッダーに設定します) ?

4

2 に答える 2

2

私はこれと同じ問題に遭遇していました。私の場合、デフォルトのキャッシュ ポリシー (NSURLRequestUseProtocolCachePolicy) を使用しており、サーバーがチェックする "if-none-match" ヘッダー フィールドを自動的に設定していました。ただし、キャッシュポリシーを「NSURLRequestReloadIgnoringLocalCacheData」に設定すると、明らかにそのヘッダーフィールドが削除されました。

他のキャッシュ ポリシー値を試して、そのヘッダーが追加されるかどうかを確認しましたか?

これらのさまざまなキャッシュ ポリシー値に関する優れたブログは、http: //nshipster.com/nsurlcache/でご覧いただけます。

編集: 上記の内容を確認する別のスタック オーバーフローの質問を見つけました: NSURLCache と ETags

于 2016-01-25T19:25:40.600 に答える
0

また、Xcode でシンボルを検索します (シンボルを右クリックし、「定義にジャンプ」します)。ファイルのコメントによると、存在するが実装されていないものもあります!

于 2016-01-25T20:01:53.970 に答える