Как очистить кэш браузера при перезагрузке изображения с тем же именем файла в php?

У меня есть список объектов, который также содержит миниатюру изображения. Иногда я должен изменить изображение миниатюр, но сохранить имя файла тем же. Существует ли способ вынудить браузер загрузить недавно загруженное изображение, вместо того, чтобы захватить один от кэша браузера?

Это является очень подходящим, когда люди обновляют свои аватары, который вызывает беспорядок для некоторых пользователей, которые продолжают видеть их старый аватар, пока они не очищают кэш браузера или перезапускают браузер.

16
задан 29 June 2010 в 04:49
поделиться

3 ответа

Вы можете сделать недействительным кеш для всей страницы, изменив заголовки :

<?php
header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past
?>
2
ответ дан 30 November 2019 в 16:49
поделиться

Вы можете использовать время модификации файла:

<?

$filename = 'avatar.jpg';
$filemtime = filemtime($filename);

echo "<img src='".$filename."?".$filemtime."'>";

//result: <img src='avatar.jpg?1269538749'>

?>

при изменении файла очищается кеш клиента

6
ответ дан 30 November 2019 в 16:49
поделиться

При отправке изображения убедитесь, что не отправляете заголовок Expires. Также рассмотрите возможность отправки этого заголовка кэша:

Cache-Control: must-revalidate

Это заставит браузер каждый раз запрашивать изображение у вашего сервера. Следите за наличием заголовка If-Modified-Since в запросе; если изображение не было изменено, ответьте HTTP-кодом 304.

Вся эта процедура (must-revalidate, If-Modified-Since, ответ 304) позволит браузеру кэшировать содержимое изображения, но в то же время запрашивать ваш сервер, если файл изменился.


Другое, возможно, более простое решение - устанавливать заголовок Expires только на короткое время в будущем, например, на десять минут, и информировать пользователя о десятиминутной задержке. Это ускорит загрузку большинства страниц, так как отпадет необходимость выполнять HTTP-запрос к изображению.

1
ответ дан 30 November 2019 в 16:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: