66

I have a problem where users are reporting that their images aren't being uploaded and the old ones are still there. On closer inspection the new images are there, they just have the same name as the old one. What I do on the upload is that I rename the images for SEO purposes. When they delete an image the old index becomes available and is reused. Therefore it has the same image name.

Is there a way to (i thought maybe there might be a meta tag for this) to tell the browser to not use its cahce?

The better answer is to rename the image to something totally new. I will get working on that but in the mean time is the quick solution while I work on the bigger problem.

4

14 に答える 14

150

Append a query string with an arbitrary unique number (or time, or version number, etc.):

<img src="image.png?80172489074" alt="a cool image" />

This will result in a new request, because of the different URL.

于 2009-09-16T07:36:30.490 に答える
24

硬いです。あなたは本当に画像をキャッシュしたいのですが、新しい画像が利用可能になったらそれらをキャッシュしたくありません:

  • 過去の日付でexpiresヘッダーを使用すると、キャッシュが防止されます。悪い
  • 「キャッシュバスティング」パラメータ?342038402を追加すると、問題を解決できますが、画像がキャッシュされないようにすることもできます。これは、希望どおりではありません。悪い。
  • 短い(たとえば1時間)expiresでexpiresヘッダーを使用する方が良いです... 1時間後、ユーザーには画像が表示されますが、Webサーバーは毎回画像を提供する必要はありません。妥協しますが、何時に機能しますか?本当に実現可能ではありません。

ソリューション?私は2つの良いオプションを考えることができます:

  • eTagと、それらを使用する能力を調べてください。これらはこの状況のた​​めに設計されています。ブラウザは、ファイルが最新であるかどうかをサーバーに明示的に尋ねます。意地悪なことがない場合は、apacheでこれをオンにすることができます。
  • 新しい画像ごとに新しいURLを作成します(そして、遠い将来の期限切れヘッダーを使用します)。これはあなたが取り組んでいることです。
于 2009-09-16T09:52:55.973 に答える
5

現在の日時を画像の src に追加します。

<img src="yourImage.png?v=<?php echo Date("Y.m.d.G.i.s")?>" />
于 2012-12-05T23:02:47.980 に答える
3

別の強力なソリューション:

<img src="image.png?v=<?php echo filemtime("image.png"); ?>" />

これにより、パスに「最終変更タイムスタンプ」が出力されます。

新しいバージョン --> 新しいイメージをダウンロード

同じバージョン --> キャッシュのものを取得

于 2020-06-12T09:18:22.110 に答える
2

ブラウザーとサーバーの間で交換されるデータを見ると、ブラウザーが画像の HTTP HEAD 要求を送信することがわかります。結果には変更時間が含まれます (ただし、実際の画像データは含まれません)。サーバー上で画像が変更され、ブラウザーが画像を再度ダウンロードする必要がある場合は、この時間が変更されることを確認してください。

于 2009-09-16T08:12:48.280 に答える
1

PHP では、乱数または現在のタイムスタンプを送信できます。

<img src="image.jpg?<?=Date('U')?>">

また

<img src="image.jpg?<?=rand(1,32000)?>">
于 2014-01-14T16:05:38.640 に答える
1

私は数回前にこの問題を思いつきました。そして、AJAX で JSON を介してデータを取得していました。だから私がしたことは、Math.random() Javascript関数を追加しただけで、魅力的に機能しました。私が使用したバックエンドはフラスコでした。

<img class="card-img-top w-100 d-block" style="padding:30px;height:400px" src="static/img/${data.image}?${Math.random()} ">

于 2020-04-21T21:05:10.313 に答える