1

私はこの問題について何の運もなしにしばらく静かにゴーグルしてきました、誰かが助けてくれることを願っています。

問題は、アプリケーションキャッシュを使用してウェブアプリを開発する場合の、アプリケーションキャッシュ、ブラウザキャッシュ、およびプロキシに関係します。

Webアプリについて:

ウェブアプリは高解像度の画像を表示し、ユーザーがそれらの間を移動できるようにします。インタラクションを流暢にするために、すべての画像はajaxを使用して事前に読み込まれます(読み込みはセミインテリジェントであるため、画像が読み込まれると画像が表示され、残りはバックグラウンドで読み込まれ続けます)。これに加えて、Webアプリ全体が(マニフェストファイルを使用して)アプリケーションキャッシュにキャッシュされ、iPadでオフラインでアクセスできるようになります。また、これにより、他のブラウザの一般的なパフォーマンスが向上します。

問題:

マニフェストファイルが更新されると、ブラウザ(主にChromeとOSX上のFirefoxでテスト済み)は、サーバーからファイルを要求するのではなく、ブラウザのキャッシュからファイルをロードします。ブラウザのキャッシュが期限切れになり、リクエストが実際のサーバーまたはプロキシに送信される場合があります。多くの場合、これによりWebアプリが更新されなくなります。

キャッシング制御ヘッダーを試してみました:

キャッシュなし、再検証する必要があります(Firefoxで機能させるためにキャッシュは必要ありません)。

これは、アプリケーションキャッシュをサポートし、リクエストに次の2つのヘッダーを含めるように強制するブラウザに最適です。

  • If-None-Match
  • If-Modified-Since

マニフェストファイルから新しいアセットを要求しているとき。ただし、アプリケーションキャッシュをサポートしていないブラウザや、マニフェストファイルを介して何もキャッシュしないように指示されているブラウザでは、通常のブラウザキャッシュにファイルはキャッシュされません。これらのブラウザは、画像を表示しているときに画像を再度要求します(ajax呼び出しですでにダウンロードされているキャッシュされた画像は使用しません)。サーバーは304で応答するため、問題はそれほど悪くはありませんが、最適なソリューションではありません。

私が欲しいもの:

アプリケーションキャッシュにファイルをキャッシュするブラウザに、次の2つのヘッダーを含めたいと思います。

  • If-None-Match
  • If-Modified-Since

マニフェストファイルが更新されていることを確認します。アプリケーションキャッシュを使用しないブラウザの場合、同じセッションでサーバーに複数のリクエストを送信しないように、通常どおりファイルをキャッシュしたいと思います。

これは可能ですか、それとも問題に対する別の解決策がありますか?

ご協力いただきありがとうございます。

4

0 に答える 0