Подтвердить что ты не робот

Есть ли способ заставить браузер обновлять/загружать изображения?

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

Есть ли способ (я подумал, может быть, может быть метатег для этого), чтобы сообщить браузеру не использовать его cahce?

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

4b9b3361

Ответ 1

Добавить строку запроса с произвольным уникальным номером (или временем или номером версии и т.д.):

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

Это приведет к появлению нового запроса из-за другого URL.

Ответ 2

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

  • Использование заголовка expires с датой в прошлом предотвращает кеширование. Bad
  • Добавление параметра "перехват кеша" 342038402 может устранить проблему, но также может препятствовать кэшированию изображения, которое вам не нравится. Bad.
  • Использование заголовка expires с коротким (скажем, 1 час) истекает, лучше... через час пользователь увидит изображение, но ваш веб-сервер не будет обслуживать его каждый раз. Компромисс, но какое время работает? Не реально.

Решение? Я могу подумать о двух хороших вариантах:

  • Посмотрите на eTags и свою способность использовать их. Они предназначены для этой ситуации. Браузер явно спросит ваш сервер, обновлен ли файл или нет. Вы можете просто включить это в apache, если у вас нет этого.
  • Создайте новый URL для каждого нового изображения (и используйте заголовок с далеким будущим истечением). Это то, над чем вы работаете.

Ответ 3

Вы можете поместить тег http-equiv в тег <meta>, который указывает браузеру не использовать кеш (или даже лучше - использовать его определенным образом), но лучше настроить сервер для отправки надлежащего http cache заголовки. Проверьте статью о кешировании.

Тем не менее, некоторые браузеры могут не поддерживать весь стандарт http, но я считаю, что это путь.

Ответ 4

Добавить текущее время-время в изображение src:

<img src="yourImage.png?v=<?php echo Date("Y.m.d.G.i.s")?>" />

Ответ 5

вы можете управлять поведением кэша, играя с заголовками HTTP.

установка заголовка expires в прошлом заставит браузер не использовать кешированную версию.

Expires: Sat, 26 Jul 1997 05:00:00 GMT

Вы можете обратиться к RFC, чтобы получить более подробную информацию.

Ответ 6

в PHP вы можете использовать этот трюк

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

Функция time() показывает текущую временную метку. Нагрузка каждой страницы различна. Таким образом, этот код обманывает браузер: он читает другой путь и "думает", что изображение изменяется, так как пользователь посетил сайт в последний раз. И он должен перезагрузить его, а не использовать кеш-память.

Ответ 7

Перейти случайным образом. Просто используйте случайное число и добавьте его к имени файла изображения.

<img src="image.jpg?<?=rand(1,1000000)?>">

Ответ 8

Мое любимое решение PHP:

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

каждое изменение файла "создать" новую версию файла

Ответ 9

Если вы посмотрите на данные, которые обмениваются между вашим браузером и сервером, вы увидите, что браузер отправит запрос HTTP HEAD для изображений. Результат будет содержать время модификации (но не фактические данные изображения). Убедитесь, что это время изменяется, если изображение изменяется на сервере, и браузер должен снова загрузить изображение.

Ответ 10

В PHP вы можете отправить случайное число или текущую временную метку:

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

или

<img src="image.jpg?<?=rand(1,32000)?>">

Ответ 11

это было не совсем нормально, я думаю, что это способ правильно его программировать.

 <td><?php echo "<img heigth=90 width=260 border=1 vspace=2 hspace=2 src=".$row['address']."?=".rand(1,999)."/>" ?></td>