この質問に真剣に答えたい場合は、私が作成したミニアプリのクローンを作成し、答えについて推測する前に、同じように動作しないかどうかを確認してください。ありがとうございます:)
https://github.com/pavel-zdenek/nsurlprotocol-testbed
非常に単純なブラウザ:UIWebView
すべてのリクエストが最小限のNSURLProtocol
再実装を通過します。ロード時間が経過します。スイッチは、実行時にプロトコル ハンドラを登録解除/登録します。ここで、特定のサイトhttp://www.rollingstone.comをロードします。他の多くのリソースに加えて、ページは GET します
http://sjc.ads.nexage.com/js/admax/admax_api.js
XHRリクエストを生成します
http://sjc.mediation.nexage.net/admax/adMaxApi.do?dcn=<somehash>
PZProtocolHandler
OFF : XHR は即座にロードされます。回線 (サメ) で HTTP 200 として観測され、Safari Web Inspector で正常にロードされたと反映されます。それ以上の負荷では、ネットワーク上にはありませんが、Web インスペクターではまだ HTTP 200 です。つまり、キャッシュされます。
PZProtocolHandler
ON : Web インスペクターは 3 回の試行を報告し、それぞれ 10 秒後にタイムアウトになり、HTTP 404 になります。それ以上リロードしても変化はありません。ここで興味深いのは、wire(shark) によると、リクエストは送信され、適切な HTTP 200 で応答されます。"Someone" は に向かう途中で 404 を構成していUIWebView
ます。
さて、巧妙なブログを読む前であっても、サーバーの応答にCache-Control
ヘッダーが含まれていない場合、iOS の URL キャッシュが熱核になることがわかりました。そして、この特定の GET リクエストはそのような場合です。しかし、それで 404 エラーが発生することはありません。また、さまざまな方法でデフォルトのキャッシュを休止状態にしようとしました。 でキャッシュ関連のデリゲート呼び出しを実装しNSURLProtocol
、キャッシュ禁止フラグを使用して新しいリクエストを作成し、で予想されるトップナレッジを使用し、「ヌルキャッシュ」であると思われるものSDURLCache
に置き換えました。プロジェクト ソースのすべてを参照してください。NSURLCache
404は私にとって持続します。オーバーライドNSURLProtocol
するという単なる事実が物事をそれほど壊すとは思えません。そのためのレーダーを埋める機会がなければ、私は生きることができませんでした、ありがとう。私はまだ何か間違ったことをしていることを願っています。