通常、この手法はほとんど静的なコンテンツで使用されます。
長時間キャッシュするようにブラウザに指示するスクリプトリターンヘッダーがあります。これにより、ブラウザは新しいコピーを要求する代わりに、キャッシュされたコピーを使用するため、帯域幅が低下します。javascriptライブラリ、ロゴ、CSSファイルなどに最適です。
欠点は、あなたが物事を変更するとき、それらがキャッシュされているので、人々はそれらを見ることができないということです。これは、CSSファイルまたは別のjavascriptファイルの新しいバージョンに依存する新しいjavascriptウィジェットライブラリなどの相互依存関係がある場合、さらに悪化する可能性があります。1つだけが読み込まれると、ページが正しく表示/機能しない場合があります。
これに対する1つの半解決策は、有効期限をバランスの取れた時間、たとえば1日に設定して、全員が最終的に新しいコンテンツを要求するようにすることです(少なくとも、1日に1回コンテンツを取得するため、帯域幅がわずかに増加します)。ただし、これは依存関係の問題を解決しません。
ランダムパラメータ(?cache =)を使用することは、この問題の優れた解決策です。基本的に、サーバーはパラメーターを無視しますが、ブラウザーの場合、パラメーターが異なるとURLも異なります。メインサイトはコンテンツがいつ変更されるかを知ることができるため、パラメーター値を変更して、ブラウザーが変更された瞬間にブラウザーを強制的に更新します(コードに問題がない場合、古いキャッシュや依存関係の問題が発生する可能性はありません)。
パラメータ名は重要ではなく、その値も重要ではありません。ただし、サーバーによって解釈されるものは避けたいのは明らかです。このメカニズムの人気のある選択肢:
- ファイルのmd5(計算にコストがかかる可能性があるため、このサーバー側もキャッシュします)
- ファイルの日付/時刻、または日付/時刻のハッシュ
- ファイルまたはサイト全体のバージョン番号(新しいコンテンツをデプロイするたびにバージョンをインクリメントする場合)
彼らがstackoverflowでキャッシュを行う方法についてのブログ投稿があります。
私が見たもう1つのシナリオは、コンテンツをキャッシュする原因となるヘッダーをデフォルトで送信するサーバーにデプロイすることです。たとえば、一部のホスティングプロバイダーはこれを行っていました(おそらくまだそうですが、個人的には問題を確認していません。十年)。?cache =を設定することで、これを回避できます。ただし、ここでの実際の解決策は、使用に意味がない場合にサーバーをデフォルトでキャッシュしないようにすることです。