Я запутался, как я могу контролировать кеш, чтобы мои клиенты могли видеть изменения на сайте - PullRequest
0 голосов
/ 06 мая 2010

У меня около 10 сайтов для клиентов. Время от времени клиент будет запрашивать обновление своего сайта. Это может быть простая смена изображения, новый PDF или простая смена текста. Я делаю изменения и затем отправляю им ссылку на веб-страницу с обновлением. Примерно через час я получу письмо от клиента, в котором будет сказано, что они все еще видят старую страницу. Затем я объясню им, как очистить кеш браузера. Я пытаюсь понять, есть ли способ сообщить браузеру, что я обновил веб-сайт и должен перезагрузить страницу и обновить кэш. Я думал о том, чтобы попробовать метатег, но я прочитал, что они не очень надежны. Также я хотел бы, чтобы страница кэшировалась, я просто хочу иметь возможность очистить ее при обновлении. Это возможно? Я продвинутый веб-разработчик (HTML, CSS, Javascript) и знаю немного PHP. Кеш - это одна из тех вещей, которые я не очень хорошо понимаю.

Ответы [ 2 ]

0 голосов
/ 06 мая 2010

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

0 голосов
/ 06 мая 2010

В зависимости от того, какой у вас внешний интерфейс, у вас может не быть доступа или интереса к изменению заголовков.

Одним из очень простых решений является переименование ресурсов при их изменении. Очевидно, что переход от «image.jpg» к «image2.jpg» каждый раз, когда он изменяется, будет неудобно поддерживать, вдвойне в зависимости от вашего контроля исходного кода, но переход от «image.jpg? V = 1» к «image.jpg ? v = 2 "позволит вам сохранить одинаковые имена файлов, заставляя браузеры и посредников кэширования перезагружать ресурс.

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

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

Добавить заголовок Cache-Control и заголовок Expires. Вместе они должны помешать всем браузерам и посредникам кэшировать html-файл, вызывая перезагрузку каждый раз:

<?php
  header("Cache-Control: no-cache,no-store,must-revalidate");
  header("Expires: 0");
?>

Просто убедитесь, что ваши вызовы header () перед выводом каких-либо данных страницы, так как заголовок HTTP должен быть отправлен перед отправкой любой из страниц.

...