Как заставить браузер обновить кэшированную версию веб-страницы - PullRequest
25 голосов
/ 30 июля 2009

У меня есть веб-сайт, который из-за плохо подготовленного файла apache conf дал указание пользователям кэшировать URL-адрес веб-сайта через несколько лет. В результате, когда человек посещает сайт, он часто даже не пытается даже запросить страницу. Браузер просто загружает HTML из кеша.

Этот веб-сайт собирается получить серьезное обновление, и я бы хотел, чтобы пользователи могли его увидеть. Есть ли способ заставить меня повторно запросить веб-страницу? Я боюсь, что для некоторых пользователей, если они не нажмут F5, они могут видеть старую веб-страницу в течение нескольких лет.

Ответы [ 8 ]

18 голосов
/ 30 июля 2009

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

5 голосов
/ 30 июля 2009

Есть несколько вариантов для достижения этой цели. Первый В разделе добавить метатег:

<meta http-equiv="pragma" content="no-cache" />

По сути, браузер не будет кэшировать страницу.

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

<?php
session_start();

$_SESSION = array();
session_destroy();

?> 

Вы можете добавить это на свой веб-сайт на пару дней, а затем удалить. Я действительно не знаю, подойдет ли это, но, возможно, вы найдете это полезным

4 голосов
/ 30 июля 2009

Можно утверждать, что если ваше «основное обновление» занимает всего несколько (2 или 3) недель, вам нужно всего лишь перенастроить вашу конфигурацию apache сейчас (в будущем нет ничего для html - только для ресурсов и контента, которые больше скорее всего никогда не изменится). Кэш Firefox по умолчанию составляет ~ 50 МБ, и это немного, потому что изображения также кэшируются, а на современных веб-сайтах много контента.

Не идеально - но это то, что я хотел бы сделать - когда я не хочу или не могу изменить URL;)

2 голосов
/ 30 июля 2009

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

1 голос
/ 05 января 2016

Задержка на годы, но это может помочь кому-то в будущем: если у вас есть любой файл javascript, который не кэшируется годами в будущем (то есть, если у вас есть какой-либо способ запустить новый js кэшированный сайт), добавьте несколько js, которые программно очистят кэш . Как только конфигурация исправлена ​​и / или обновление завершено, удалите очистку кэша js.

Ctrl + F5 в jquery для очистки кэша браузера

1 голос
/ 22 апреля 2013

Я понимаю, что этот вопрос очень старый, но у меня есть жизнеспособный ответ:

Конечно, вы можете заставить новые URL избегать распространенных кэшей (не долгосрочных) ...

* 1005 Т.е. *

  • Добавить запрос в статические файлы .js / .css / .html
  • Добавить мета-прагма-тег для no-cache
  • Перенаправление на стороне сервера, отсутствие кэша, удаление файлов cookie, сеансов и т. Д.

Однако в подобном сценарии (ранее отредактированном apache .conf для длительного кэширования), поскольку вы не можете изменить домен для целей SEO, вы можете использовать «грубый хак», который минимизирует влияние на SEO: *

Скопируйте свою индексную страницу (т.е. index.php) на новую страницу (т.е. index_new.php) и отредактируйте httpd.conf (или эквивалентный), чтобы DirectoryIndex была новой страницей. Затем просто удалите или переместите старую страницу, теоретически она всегда должна перенаправлять на новую страницу.

т.е. в Debian / Ubuntu:

cd /var/www
cp index.php index_new.php
sudo vim /etc/apache2/sites-enabled/000-default

    <Directory /var/www/>
        ...
        DirectoryIndex index_new.php
    </Directory>

mv index.php index_old.php
sudo service apache2 restart

И вот, пожалуйста.

1 голос
/ 30 июля 2009

изменить URL каждого ресурса

0 голосов
/ 18 апреля 2018

Вы можете внести все необходимые изменения в файлы HTML, например

<meta http-equiv="cache-control" content="no-cache, must-revalidate, post-check=0, pre-check=0" />
<meta http-equiv="cache-control" content="max-age=0" />
<meta http-equiv="expires" content="0" />
<meta http-equiv="expires" content="Tue, 01 Jan 1980 1:00:00 GMT" />
<meta http-equiv="pragma" content="no-cache" />

Но также вы можете явно указать Apache использовать модуль mod_expires.c и добавить пару директив в файл httpd.conf:

<IfModule mod_expires.c>
  # Turn on the module.
  ExpiresActive on
  # Set the default expiry times.
  ExpiresByType text/html "modification plus 5 seconds"
  ExpiresByType text/javascript "modification plus 5 seconds"
  ExpiresDefault "access plus 2 days"
</IfModule>

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

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...