Проблема в том что в ряде случаев браузеры не проверяют обновился ли файл на сервере и подсовывают старую картинку из своего кэша.
Как можно запретить кэшировать конкретное изображение, или обнулить кэш принудительно?
Спустя 3 минуты, 2 секунды (2.11.2011 - 07:57) McLotos написал(а):
expires
Значением этого заголовка является дата, после которой содержимое ресурса устареет. Если пользователь обратится к ресурсу позднее заданной даты, то браузер должен запросить ресурс у сервера, а не из локального кеша. Если заголовок expires содержит дату, прошедшую относительно текущей, то при каждом следующем обращении к ресурсу браузер снова будет обращаться к серверу, а не к локальному кешу
header ("expires: mon, 26 jul 1997 05:00:00 gmt");
last-modified
Значением данного заголовка является дата последнего обновления ресурса. Большинство современных браузеров используют следующий алгоритм, если ресурс уже находится в локальном кэше:
запрашивает с сервера дату последнего обновления ресурса сравнивает полученную дату и дату ресурса в локальном кэше если ресурс на сервере новее ресурса в кэше – запрашивается ресурс с сервера.
Если ресурс, расположенный на сервере, содержит в данном поле текущую дату, то браузер будет каждый раз запрашивать ресурс с сервера, а не из локального кэша. Следующий листинг демонстрирует использование поля заголовка last-modified:
header ("last-modified: " . gmdate("d, d m y h:i:s") . " gmt");
cache-control и pragma
Поля заголовка, непосредственно отвечающие за кэширование ресурса. Поле «pragma» было определено в стандарте rfc 1945, описывающим протокол http 1.0. Данное поле считается устаревшим, но в некоторых случаях приходится использовать именно его. В частности некоторые proxy-сервера неправильно обрабатывают запросы к постоянно изменяющимся ресурсам, если вместе с ресурсом не передается данное поле заголовка.
Второе поле определено в стандарте rfc 2068, который описывает протокол http 1.1. Данное поле заголовка позволяет запретить кэширование, и каждый раз запрашивать ресурс с сервера. Следующий листинг демонстрирует использование полей заголовка cache-control и pragma для запрета кэширования:
header("cache-control: no-cache, must-revalidate"); header("pragma: no-cache");
Значением этого заголовка является дата, после которой содержимое ресурса устареет. Если пользователь обратится к ресурсу позднее заданной даты, то браузер должен запросить ресурс у сервера, а не из локального кеша. Если заголовок expires содержит дату, прошедшую относительно текущей, то при каждом следующем обращении к ресурсу браузер снова будет обращаться к серверу, а не к локальному кешу
header ("expires: mon, 26 jul 1997 05:00:00 gmt");
last-modified
Значением данного заголовка является дата последнего обновления ресурса. Большинство современных браузеров используют следующий алгоритм, если ресурс уже находится в локальном кэше:
запрашивает с сервера дату последнего обновления ресурса сравнивает полученную дату и дату ресурса в локальном кэше если ресурс на сервере новее ресурса в кэше – запрашивается ресурс с сервера.
Если ресурс, расположенный на сервере, содержит в данном поле текущую дату, то браузер будет каждый раз запрашивать ресурс с сервера, а не из локального кэша. Следующий листинг демонстрирует использование поля заголовка last-modified:
header ("last-modified: " . gmdate("d, d m y h:i:s") . " gmt");
cache-control и pragma
Поля заголовка, непосредственно отвечающие за кэширование ресурса. Поле «pragma» было определено в стандарте rfc 1945, описывающим протокол http 1.0. Данное поле считается устаревшим, но в некоторых случаях приходится использовать именно его. В частности некоторые proxy-сервера неправильно обрабатывают запросы к постоянно изменяющимся ресурсам, если вместе с ресурсом не передается данное поле заголовка.
Второе поле определено в стандарте rfc 2068, который описывает протокол http 1.1. Данное поле заголовка позволяет запретить кэширование, и каждый раз запрашивать ресурс с сервера. Следующий листинг демонстрирует использование полей заголовка cache-control и pragma для запрета кэширования:
header("cache-control: no-cache, must-revalidate"); header("pragma: no-cache");
Спустя 13 минут, 38 секунд (2.11.2011 - 08:10) LRCenter написал(а):
Спасибо, а кроме отправки заголовков есть еще какие-либо методы? Чтобы не кешировать лишь фрагмент страницы, например изображение?
Спустя 3 минуты, 19 секунд (2.11.2011 - 08:14) kirik написал(а):
Цитата (LRCenter @ 2.11.2011 - 01:10) |
например изображение? |
Подставляй случайное значение типа:
<img src="site.com/upload/image.jpg?ЗДЕСЬ_РАНДОМНОЕ_ЧИСЛО" />
Из-за того что число будет меняться каждый раз когда перегружают страницу - браузер будет думать, что это новая картинка.
Спустя 3 минуты, 1 секунда (2.11.2011 - 08:17) McLotos написал(а):
Цитата |
Из-за того что число будет меняться каждый раз когда перегружают страницу - браузер будет думать, что это новая картинка. |
Обманываете браузер? Аяяй!
Спустя 2 минуты, 34 секунды (2.11.2011 - 08:19) LRCenter написал(а):
kirik, Блин! Ну я склеротик, делал же так когда капчу писал, и забыл!
- Доктор, у меня провалы в памяти..
- И давно они у вас?
- Кто?
- Провалы
- Какие провалы?!
;-)
Спасибо!
- Доктор, у меня провалы в памяти..
- И давно они у вас?
- Кто?
- Провалы
- Какие провалы?!
;-)
Спасибо!
_____________
Меньше кода - меньше багов ©