このような問題を処理するための通常のアプローチは、HTTP キャッシング ヘッダーを使用し、ページが参照するリソースの URL をスマートに構築することです。
一般的な考え方は次のとおりです。ページによって読み込まれるすべてのリソース (画像、スクリプト、CSS ファイルなど) には、バージョン管理された一意の URL が必要です。たとえば、 をロードする代わりにロード/images/button.png
して、/images/button_v123.png
そのファイルを変更すると、その URL が に変更され/images/button_v124.png
ます。通常、これは、静的ファイル URL に対する URL 書き換えによって処理されます。たとえば、Web サーバーは、Web サーバーのファイル システムから/images/button_v124.png
実際にファイルをロードする必要があることを認識します。/images/button.png
バージョン番号の作成は、ビルド番号の追加、ファイル コンテンツの CRC の使用、またはその他の多くの方法で行うことができます。
次に、親ページで URL が構築されている場合は、バージョン管理された URL を参照していることを確認する必要があります。これには明らかに、すべての URL を構築するために使用される動的コードが必要です。これは、ページの生成に使用されるコードを調整するか、すべてのtext/html
リクエストに影響するサーバー全体のプラグインによって実現できます。
次に、Expires
すべてのリソース リクエスト (画像、スクリプト、CSS ファイルなど) のヘッダーを、かなり先の日付 (たとえば、今から 10 年後) に設定します。これにより、効果的に永久にキャッシュされます。これは、各ページによって読み込まれたすべてのリクエストが常にキャッシュからフェッチされることを意味します。キャッシュの無効化は発生しません。基礎となるリソースが変更されると、親ページは新しい URL を使用してそれを見つけるため、問題ありません。
最後に、「親」ページをキャッシュする方法を理解する必要があります。これをどのように行うかは、判断の呼びかけです。ETag
/If-None-Match
HTTP ヘッダーを使用して、ページの新しいバージョンを毎回確認することができます。これにより、サーバーが変更されていないことを報告した場合に、ページをキャッシュからすばやく読み込むことができます。または、Expires
(および/またはMax-Age
) を使用して、サーバーをチェックする前に、一定期間キャッシュから親ページをリロードすることもできます。
さらに高度なことをしたい場合は、いつでもカスタム プロキシ サーバーをキオスクに配置できます。その場合、キャッシュの実行方法を完全に集中管理できます。