1

ブラウザのリソースのキャッシュに関する問題に直面しています。タイミングは固定ではありませんが、いくつかの javascript ファイル、css ファイルが継続的に変更されます。

サーバー上のこれらのファイルを更新すると、新しいファイルが読み込まれず、新しいファイルを読み込むためにブラウザのキャッシュをクリアする必要があります。

リソースをロードするときに、サーバーファイルに変更がある場合はサーバーからロードし、ブラウザキャッシュに保存されている既存のファイルを使用する方法、サーバーまたはブラウザの設定はありますか。


ブラウザベース/サーバーベースの構成が必要なソリューションを探していますが、更新するたびに手動で行う必要はありません

4

6 に答える 6

4

URL の末尾に ?[一意の/乱数] を付けるだけで、毎回ファイルが取得されます。

例えば

http://abc.com/css/mystyles.css

のようにする

http://abc.com/css/mystyles.css?123163

タイムティックは、乱数の代わりに最良のオプションの1つになる可能性があります

于 2012-04-16T09:39:38.823 に答える
1

クエリ文字列だけを使用してキャッシュを破棄することは 100% 保証されているわけではありません。たとえば、一部のプロキシ サーバーは、html からリンクされたファイルのクエリ文字列を削除します。

より良い方法は、URI またはファイル名を変更することです。私はApacheで書き換えルールを使用して、次のようにします:

my.app.com/12345/js/file.js

対象:

htdocs/js/file.js

ファイルシステムで。

次に、私のアプリはソース管理に基づいてリビジョン番号を更新しますが、html で手動でこれを行うことができます。このソリューションと、遠い将来の有効期限 (http 1.0) および max-age (http 1.1) ヘッダーの設定により、新しい uri を介した永続的なクライアント キャッシュの利点と、ファイルが同じ場所にあるという開発の容易さの利点が得られます。ファイルシステム。

遠い未来のヘッダーについてのスティーブ・サウダーズ:

http://www.stevesouders.com/blog/2008/08/23/revving-filenames-dont-use-querystring/

于 2012-04-16T20:50:46.610 に答える
1

リソースをロードするときに、サーバーファイルに変更がある場合はサーバーからロードし、ブラウザキャッシュに保存されている既存のファイルを使用する方法、サーバーまたはブラウザの設定はありますか。

上記を実現するには、Configure ETagsを使用できます。ただし、キャッシュされたファイルのようにサーバーにヒットする http 要求のコストを回避することはできません。

アップデート

あなたのコメントから、このようなことができます

<?
function get_filename_with_version($fname)
{
    return "?filename=" . $fname; // Generate the hash of the content and append it here as a query string
}
?>

<link rel="stylesheet" href="resrc.php<?php echo get_filename_with_version('a.css');?>" />
于 2012-04-16T09:52:47.910 に答える
0

PHP を使用している場合は、次のソリューションを使用できます。

//Just add the timestamp as parameter to your filename.
<link rel="stylesheet" type="text/css" href="css/stylesheet.css?<?php echo time(); ?> />
<script type="text/javascript" src="scripts/script.js?<?php echo time(); ?>"></script>
<img src="image.png?<?php echo time(); ?>" />
于 2012-04-16T10:21:45.283 に答える
0

クライアントが外部の JavaScript と CSS を 1 回だけフェッチする必要があるように、サイトを設計することをお勧めします。

1 年後に期限切れになるように外部リソースを設定します。各ファイル名にバージョン番号を追加します。そのため、「stylesheet.css」の代わりに「stylesheet-1.2.4.css」を使用し、クライアントの CSS を更新する場合はバージョン番号を増やします。

バージョン番号をインクリメントすると、更新されたファイルは完全に別のリソースと見なされるため、クライアントは更新されたファイルをダウンロードする必要があります。

このソリューションが必要ない場合は、次のようにします。

<link rel="stylesheet" type="text/css" href="/stylesheet.css?foo=<?php echo rand(); ?>"/>

また

 <link rel="stylesheet" type="text/css" href="/stylesheet.css?foo="Math.floor(Math.random()*1000)>
于 2012-04-16T09:41:35.507 に答える
0

リソースをロードするときに、サーバーファイルに変更がある場合はサーバーからロードし、ブラウザキャッシュに保存されている既存のファイルを使用する方法、サーバーまたはブラウザの設定はありますか。

それを確認するためにクッキーを使用してみてください。

于 2012-04-16T09:43:13.617 に答える