これを処理する正しい方法は、リソースのURL規約を変更することです。たとえば、私たちのようにそれを持っています。ブラウザは、まだファイルをキャッシュしますが、それをバージョン管理との適切な方法を実行するために取得するには
/resources/js/fileName.js
、URLに何かを追加することです。クエリ文字列に値を追加するとキャッシングができないので、配置する場所は/resources/
です。
キャッシュをクエリ文字列のための参照:http://www.w3.org/Protocols/rfc2616/rfc2616-sec13.html#sec13.9
したがって、たとえば、あなたのURLは次のようになります。
/resources/1234/js/fileName.js
だから何あなたができることは、プロジェクトのバージョン番号(またはプロパティでいくつかの値を使用しています/ configファイル)には、この番号はに変更する必要があるため、プロジェクトが変更されたときにのみ変更されるため、キャッシュファイルの再ロード時に手動で変更します。したがって、あなたのURLは次のようになります:
/resources/cacheholder${project.version}/js/fileName.js
これで十分です。
中間の値が動的なので、問題はURLをマッピングすることです。私たちが克服したのは、URL書き換えモジュールであり、アプリケーションに到達する前にURLをフィルタリングすることができました。書き換えは、次のようなURLを見ました:
/resources/cacheholder______/whatever
そして、cacheholder_______/
部分を削除しました。書き直し後、通常のリクエストのように見え、サーバーは他の特定のマッピング/ロジックなしで正しいファイルで応答します...ポイントは、ブラウザが新しいファイルだと思ったことです(本当に ' t)、それを要求し、サーバーはそれを把握し、正しいファイルを提供します(「奇妙な」URLでも)。
もちろん、この動的文字列をファイル名自体に追加してから、書き換えツールを使用して削除することもできます。いずれにしても、同じことが行われます。書き換え中に文字列を対象とし、それを削除します。これは、サーバーブラウザをだますことができますが、ない:)
UPDATE:
私が本当に好きな代替は、内容に基づいてファイル名を設定し、それをキャッシュすることです。例えば、これはハッシュで行うことができます。もちろん、このタイプのものは手動で行い、プロジェクトに保存するものではありません(うまくいけば)。これはアプリケーション/フレームワークが処理すべきものです。
- すべてのリソースが
- (このファイルまたはマッピング)新しいファイルをチェックされていると、作成されます。たとえば、Grailsの中で、「ハッシュとキャッシュ」リソース、次のことが起こるようにというプラグインがありますあなたのページへ
<script>
/<link>
タグを追加する場合はハッシュという名前のファイルが要求されると、ハッシュ化された名前は
- その内容
- のハッシュに使用され、それが元のリソース
- ハッシュ・を提供しています名前名前付きファイルが "永遠に"キャッシュされる
この設定の素晴らしい点は、正しくキャッシュすることを心配する必要がないことです。ファイルを永久にキャッシュするように設定するだけです。ハッシュはコンテンツに基づいて利用可能なファイル/マッピングを処理する必要があります。また、ロールバック/取り消しがすでにキャッシュされ、すばやく読み込まれるようにする機能も備えています。
出典
2013-04-10 21:09:05
Ian
"クエリ文字列に値を追加するとキャッシュが許可されません" - 私が読んだドキュメントから、そのステートメントは不正確です。 HTTP GETはブラウザによってキャッシュされ、問合せ文字列の有無は問わない。 http://www.w3schools.com/tags/ref_httpmethods.asp – pmont
@ pmontを参照してください.W3Schoolsを実際のW3ドキュメントで参照しないでください。あなたのポイントは無効です、私が投稿したリンクを読むか、より正当なものを提供してください – Ian
それについて私に怒る必要はありません。私が配備したWebサーバーには、すべてのキャッシュされたクエリURLがあります。どのサーバーがキャッシュしていないことを確認しましたか?あなたのリンクから:これは具体的には、そのようなURIのHTTP/1.0サーバからの応答をキャッシュから取得してはならないことを意味します "" HTTP/1.1の変更によって異なる動作が説明される可能性がありますか? – pmont