Есть ли способ заставить браузеры обновлять / загружать изображения?
У меня проблема, когда пользователи сообщают, что их изображения не загружаются, а старые все еще там. При ближайшем рассмотрении новые снимки есть, они просто имеют то же имя, что и старый. Что я делаю при загрузке, так это переименовываю изображения в целях SEO. Когда они удаляют изображение, старый индекс становится доступным и используется повторно. Поэтому он имеет то же самое имя изображения.
есть ли способ (я думал, может быть, для этого может быть мета-тег) сказать браузер, чтобы не использовать его cahce?
лучший ответ-переименовать изображение во что-то совершенно новое. Я буду работать над этим, но в то же время это быстрое решение, пока я работаю над большей проблемой.
10 ответов
добавьте строку запроса с произвольным уникальным номером(или временем, или номером версии и т. д.):
<img src="image.png?80172489074" alt="a cool image" />
это приведет к новому запросу из-за другого URL-адреса.
Это тяжело. Вы действительно хотите, чтобы изображения кэшировались, но тогда вы не хотите кэшировать их после того, как новые доступны:
- С помощью заголовка expires с датой в прошлом предотвращает кэширование. Плохо!--4-->
- Добавление параметра "перебора кэша"?342038402 может устранить проблему, но также может предотвратить кэширование изображения, что не то, что вы хотите. Плохой.
- использование заголовка expires с коротким (скажем, 1 час) истекает лучше... через час пользователь увидит изображение, но ваш веб-сервер не должен будет обслуживать его каждый раз. Компромисс, но какое время работает? Не совсем осуществимо.
решение? Я могу придумать два хороших варианта:--1-->
- посмотрите в eTags, и ваша способность использовать их. Они предназначены для этой ситуации. Браузер будет явно спрашивать ваш сервер, является ли файл обновленным или нет. Вы можете просто включить это в apache, если у вас его нет.
- создать новый URL для каждого нового изображения (и используйте заголовок Far-future expires). Это то, над чем вы работаете.
вы можете поставить http-equiv
на <meta>
тег, который скажет браузеру не использовать кэш (или даже лучше-использовать его определенным образом), но лучше настроить сервер для отправки правильного http cache
заголовки. Проверьте статья о кэшировании.
тем не менее, некоторые браузеры могут не поддерживать все http
стандартный, но я считаю, это путь.
добавьте текущее время datetime к изображению src:
<img src="yourImage.png?v=<?php echo Date("Y.m.d.G.i.s")?>" />
вы можете управлять поведением кэша, играя с заголовками HTTP.
установка заголовка expires в прошлом заставит браузер не использовать кэшированную версию.
Expires: Sat, 26 Jul 1997 05:00:00 GMT
вы можете обратиться к RFC получить более подробную информацию.
Если вы посмотрите на данные, которые обмениваются между вашим браузером и сервером, вы увидите, что браузер отправит запрос HTTP HEAD для изображений. Результат будет содержать время изменения (но не фактические данные изображения). Убедитесь, что это время изменяется, если изображение изменяется на сервере и браузер должен загрузить изображение снова.
в PHP вы можете использовать этот трюк
<img src="image.png?<?php echo time(); ?>" />
функция time () показывает текущую метку времени. Каждая загрузка страницы отличается. Таким образом, этот код обманывает браузер: он читает другой путь, и он" думает", что изображение изменилось с тех пор, как пользователь посетил сайт в последний раз. И он должен повторно загрузить его, вместо того, чтобы использовать кэш.
в PHP вы можете отправить случайное число или текущую метку времени:
<img src="image.jpg?<?=Date('U')?>">
или
<img src="image.jpg?<?=rand(1,32000)?>">
Шли Наобум. Просто используйте случайное число и добавьте его с именем файла изображения.
<img src="image.jpg?<?=rand(1,1000000)?>">
Это был не ок результат, я думаю, что это способ программировать его правильно.
<td><?php echo "<img heigth=90 width=260 border=1 vspace=2 hspace=2 src=".$row['address']."?=".rand(1,999)."/>" ?></td>