アプリケーションで使用するフォルダにたくさんの画像があります。キャッシュマニフェストを使用する場合、ワイルドカードを指定して、キャッシュする特定のディレクトリ内のすべての画像またはファイルをロードできれば、メンテナンスが簡単になります。
例えば。
CACHE MANIFEST
# 2011-11-3-v0.1.8
#--------------------------------
# Pages
#--------------------------------
../index.html
../edit.html
#--------------------------------
# JavaScript
#--------------------------------
../js/jquery.js
../js/main.js
#--------------------------------
# Images
#--------------------------------
../img/*.png
これはできますか? ../img/*
を使用していくつかのブラウザで試してみましたが、機能していないようです。
私はそれがそのように機能するとは思わない。すべての画像を1つずつ指定するか、単純なPHPスクリプトを使用して、ディレクトリをループし、ファイルを出力する必要があります(正しいtext/cache-manifest
ヘッダーはもちろん)。
簡単ですが、どのように機能しますか?マニフェストファイルは、ブラウザで解析および処理されるものであり、サーバー上のファイルについて、ユーザーが指示した以外の特別な知識はありません。ブラウザにこれが表示された場合:
../img/*.png
ブラウザがサーバーに要求する最初の画像は何ですか?これらから始めましょう:
../img/1.png
../img/2.png
../img/3.png
../img/4.png
...
../img/2147483647.png
これが数値名で存在する可能性のあるすべての画像であり、半恣意的に 231-1 。 img
ディレクトリには20億個のファイルがいくつありますか?これらすべてのリクエストを行うブラウザで、20億個の404を取得するだけでよいのでしょうか。完全を期すために、ブラウザはおそらくすべてのゼロで埋められた同等物を要求したいと思うでしょう:
../img/01.png
../img/02.png
../img/03.png
../img/04.png
...
../img/001.png
../img/002.png
../img/003.png
../img/004.png
...
../img/0001.png
../img/0002.png
../img/0003.png
../img/0004.png
...
現在、ブラウザは、ほとんど存在しないファイルに対して40億を超えるHTTP要求を行い、サーバー上に存在する可能性のあるファイル名を作成する際に、文字や句読点さえも使用していません。これは、マニフェストファイルが機能するための実行可能な方法ではありません。サーバーは、img
ディレクトリ内のファイルが認識されている場所であるため、ファイルのリストを作成する必要があるのはサーバー上です。
ブラウザがフォルダリストを要求できるとしたら、それは大きなセキュリティ問題になります。そのため、Tomcatはデフォルトでその機能をオフにしています。
ただし、ブラウザは、キャッシュするページによって参照されるワイルドカードに一致するものをすべて見つけることができます。このアプローチは依然として問題があります(たとえば、最初は使用されなかったがJavaScriptによって動的に設定された画像など、すべてのキャッシュされたアイテムをダウンロードするだけでなく解析する必要があります)。
手動で行うのではなく、このプロセスを自動化しようとしている場合。スクリプトを使用するか、私と同じように manifestR を使用します。マニフェスト/アプリキャッシュファイルが出力され、コピーアンドペーストするだけです。私はそれをうまく使用し、通常はいくつかの変更を加えるだけで済みます。
また、ワイルドカードでネットワークヘッダーを使用することをお勧めします。
NETWORK:
*
これにより、たとえば、JSONを介して他のリンクされたドメインからのすべてのアセットをキャッシュにダウンロードできます。ワイルドカードを指定できるヘッダーはこれだけだと思います。他の人がここで言ったように、それはセキュリティ上の理由からです。
キャッシュマニフェストは非推奨になりました。キャッシュを制御するには、HTMLヘッダーを使用する必要があります。
例えば:
<meta http-equiv="Cache-control" content="public">