web-dev-qa-db-ja.com

HTML5キャッシュマニフェストでワイルドカードを指定して、ディレクトリ内のすべての画像を読み込むにはどうすればよいですか?

アプリケーションで使用するフォルダにたくさんの画像があります。キャッシュマニフェストを使用する場合、ワイルドカードを指定して、キャッシュする特定のディレクトリ内のすべての画像またはファイルをロードできれば、メンテナンスが簡単になります。

例えば。

CACHE MANIFEST
# 2011-11-3-v0.1.8
#--------------------------------
# Pages
#--------------------------------
../index.html
../edit.html
#--------------------------------
# JavaScript
#--------------------------------
../js/jquery.js
../js/main.js
#--------------------------------
# Images
#--------------------------------
../img/*.png

これはできますか? ../img/*を使用していくつかのブラウザで試してみましたが、機能していないようです。

22
zuallauz

私はそれがそのように機能するとは思わない。すべての画像を1つずつ指定するか、単純なPHPスクリプトを使用して、ディレクトリをループし、ファイルを出力する必要があります(正しいtext/cache-manifestヘッダーはもちろん)。

17
Madara's Ghost

簡単ですが、どのように機能しますか?マニフェストファイルは、ブラウザで解析および処理されるものであり、サーバー上のファイルについて、ユーザーが指示した以外の特別な知識はありません。ブラウザにこれが表示された場合:

../img/*.png

ブラウザがサーバーに要求する最初の画像は何ですか?これらから始めましょう:

../img/1.png
../img/2.png
../img/3.png
../img/4.png
...
../img/2147483647.png

これが数値名で存在する可能性のあるすべての画像であり、半恣意的に 231-1imgディレクトリには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ディレクトリ内のファイルが認識されている場所であるため、ファイルのリストを作成する必要があるのはサーバー上です。

21
robertc

ブラウザがフォルダリストを要求できるとしたら、それは大きなセキュリティ問題になります。そのため、Tomcatはデフォルトでその機能をオフにしています。

ただし、ブラウザは、キャッシュするページによって参照されるワイルドカードに一致するものをすべて見つけることができます。このアプローチは依然として問題があります(たとえば、最初は使用されなかったがJavaScriptによって動的に設定された画像など、すべてのキャッシュされたアイテムをダウンロードするだけでなく解析する必要があります)。

3
stevec

手動で行うのではなく、このプロセスを自動化しようとしている場合。スクリプトを使用するか、私と同じように manifestR を使用します。マニフェスト/アプリキャッシュファイルが出力され、コピーアンドペーストするだけです。私はそれをうまく使用し、通常はいくつかの変更を加えるだけで済みます。

また、ワイルドカードでネットワークヘッダーを使用することをお勧めします。

NETWORK:
*

これにより、たとえば、JSONを介して他のリンクされたドメインからのすべてのアセットをキャッシュにダウンロードできます。ワイルドカードを指定できるヘッダーはこれだけだと思います。他の人がここで言ったように、それはセキュリティ上の理由からです。

2
Paul

キャッシュマニフェストは非推奨になりました。キャッシュを制御するには、HTMLヘッダーを使用する必要があります。

例えば:

<meta http-equiv="Cache-control" content="public">
  • パブリック-パブリック共有キャッシュにキャッシュされる場合があります。
  • プライベート-プライベートキャッシュにのみキャッシュできます。
  • キャッシュなし-キャッシュされない場合があります。
  • いいえ-ストア-キャッシュできますが、アーカイブはできません。
0
Dan Bray