HTML5 Offline Web アプリケーションの仕様には、HTML ページをキャッシュに遅延ロードする方法の例が示されています。
CACHE MANIFEST
FALLBACK:
/ /offline.html
NETWORK:
*
これについては、Dive Into HTML5でウィキペディアの例を使用して説明しています。Web サイトの読み込み時にウィキペディア全体をキャッシュする必要はありませんが、ユーザーがアクセスするすべてのページをキャッシュする必要があります。オフライン中にユーザーがアクセスしたページには、カスタム エラー ページが表示される必要があります。
このアプローチの秘訣は、各 HTML ページにマニフェストを明示的に含めることです。マニフェストを含むページは、明示的に言及しなくても自動的にキャッシュに含まれます。したがって、この例では HTML ページをネットワークから読み込み、キャッシュに挿入します。オフラインの場合、キャッシュ内のすべてのページが機能し、キャッシュされていないページはデフォルトで offline.html ページになります。
問題は、マニフェストを含めることができない HTML 以外のファイルの場合です。具体的には、JavaScript でゲームを作成しており、そのゲームにはたくさんの音楽トラックがあります。次の要件があります。
- ゲームのロード時にユーザーがすべての音楽をダウンロードする必要はありません。
- ユーザーがオンライン中に新しい音楽トラックに遭遇した場合、そのトラックをダウンロードしてキャッシュする必要があります。
- ユーザーがオフライン中に新しい音楽トラックに遭遇した場合、無音が聞こえても問題ありません。
- ユーザーがオフライン中に既に聞いた音楽トラックに遭遇した場合は、キャッシュから再生する必要があります。
音楽ファイルが HTML の場合、上記の手法を使用して、manifest=...
最初に読み込まれたときにキャッシュに入れるための属性を与えることができます。しかし、それらは HTML ではないので、それはできません。HTML 以外のリソースをロード時にキャッシュに保存する方法はありますか?
注: 私は、従来の HTTP キャッシュ メカニズムにあまり詳しくありません。代わりに使用できる可能性がありますが、私の経験では、ファイルがブラウザーによってキャッシュされていても、ブラウザーがオフラインの場合は機能しません。この方法で実行できる場合、キャッシュ ヘッダーをどのように構成すればよいですか?