Войти Регистрация

Запрет кэширования страницы на HTML, PHP, htaccess


Запрет кэширования страницыПорой, бывает необходимо запрещать браузеру кэшировать страницу, так как информация на ней обновляется каждый раз. Это может быть генерация данных, соответственно выбранным фильтрам или другой контент, который каждый раз создается по-новому. Одним словом, бывают моменты, когда необходимо запретить коварной программе кэшировать страницу. Сегодня, мы узнаем, как реализовать это разными способами, с помощью PHP или HTML или .htaccess.

Запрет кэширования страницы на HTML

Сделать это можно с помощью мета тегов. Сейчас мы разберем разные варианты запрета на кэширование.

Запрет на кэширование браузером и прокси-сервером

<meta http-equiv="Cache-Control" content="no-cache">

Запрет кэширования страницы, только браузером

<meta http-equiv="Cache-Control" content="private">

Установка кэширования на определенное время, для браузера

С помощью кода ниже, мы можем сообщить браузеру, сколько хранить документ в кэше. После чего, кэш будет обновлен.

<meta http-equiv="Cache-Control" content="max-age=3600, must-revalidate">

Установка кэширования на определенное время, для прокси-сервера

Практически, то же самое, что и в предыдущем коде, только указание стоит конкретно для прокси-сервера.

<meta http-equiv="Cache-Control" content="max-age=3600, proxy-revalidate">

Запретить кэширование страницы с помощью PHP

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

<?php
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Expires: " . date("r"));
echo "<h1>", date("H:i:s"), "</h1>";
?>

Также, можно разрешать кэшировать на определенное время. Например, разрешим кэширование только на 1 час.

<?php
/*
 ** Разрешаем кэширование на 1 час
 */
header("Cache-Control: public");
header("Expires: " . date("r", time() + 3600));
echo "<h1>", date("H:i:s"), "</h1>";
?>

Запретить кэширование страницы с помощью .htaccess

Для простоты реализации идеи, можно все сделать на уровне конфигураций сервера Apache. Перед этим, нам нужно убедиться в том, что необходимые модули находятся в рабочем состоянии. Открываем конфигурационный файл Apache и наблюдаем следующую картину:

LoadModule expires_module modules/mod_expires.so
LoadModule headers_module modules/mod_headers.so
...
AddModule mod_expires.c
AddModule mod_headers.c

Теперь в файле .htaccess, собственно запрещаем кэшировать выводимые данные. Как нам известно, .htaccess файл будет распространяться на директорию, в которой лежит, и на все субдиректории.

 
# Заголовок Cache-Control
<IfModule mod_headers.c>
	Header append Cache-Control "no-store, no-cache, must-revalidate"
</IfModule>
 
# Заголовок Expires
<IfModule mod_expires.c>
	ExpiresActive On ExpiresDefault "now"
</IfModule>

Важно заметить, что полный запрет кэширования, повышает нагрузку на сервер. Поэтому, играйтесь с этим осторожно! А лучше, установите определенное время, на которое можно кэшировать документы. Например, установим кэширование на 1 час:

# Заголовок Cache-Control
<IfModule mod_headers.c>
	Header append Cache-Control "public"
</IfModule>
 
# Заголовок Expires
<IfModule mod_expires.c>
	ExpiresActive On ExpiresDefault "access plus 1 hours"
</IfModule>

Заключение

Это все известные для меня способы запрета на кэш. Если знаете что-то новенькое, просьба поделиться в комментариях. Надеюсь, статья была полезной, если это так, вас не затруднит поставить +1 и поделиться ею в социальных сетях.



Дальше: 40 способов наладить отношения с посетителями вашего сайта


Дискуссия по теме    15 Комментариев
Добавить комментарий
OReshka 20.08.2016 ? 00:27
Как сделать, чтобы не кэшировались файлы на сервере, на стороне сайта. ПРоблема в том, что хостер ставит ограничение на кол-во файлов, и за счет кэширования это кол-во очень сильно увеличивается. Как можно отключить это кеширование, которое идет в определенные две папки? Способами, здесь описанными, не работает.
Alex 14.04.2015 в 17:41
Такой вопрос: на сайте было включено кэширование, криво поправил стили css... Все это закэшировалось и у всех пользователей, повторно заходящих на сайт (60%), теперь отображается криво... Есть ли способ дать сигнал браузерам перезагрузить кэш? А то неделю пользователи быдут получать неведомо что, вместо сайта...
Александр 06.03.2015 в 09:06
Здравствуйте! Может кто подскажет, как можно, если конечно можно, запретить кеширование отдельной директории и все что в ней, при помощи .htaccess Например, мне надо, что бы не кешировались страницы, находящиеся в "ПАПКА1, ПАПКА2, ПАПКА3 и т.д."... http://www.САЙТ.ru/ля-ля-ля/ПАПКА1/страницы... http://www.САЙТ.ru/ля-ля-ля/ПАПКА2/страницы... http://www.САЙТ.ru/ля-ля-ля/ПАПКА3/страницы... Не знаю, доходчиво ли объяснил. Заранее благодарю!
Владимир 09.02.2015 в 18:15
Это уже к владельцу сайта, чтобы отключил браузерное кеширование, или ctrl F5. А еще в режиме инокгнито не кэшируется
Владимир 12.12.2014 в 15:53
Спасибо за информацию, помогло. В моем случае надо было запретить лишь кэш лишь на одной странице. При этом в файле .htaccess уже было прописан кэш для всего сайта. Мета тег не помог, а вот с помощью PHP сработало.
Сергей 27.09.2013 в 03:39
Отпад. А то хром запарил своим кэшем меня ограничивать... спасибО!!!
Егор 12.09.2013 в 12:32
Спасибо, очень помогло. Нашел, что искал.
Дмитрий 23.07.2013 в 07:24
До меня вдруг дошло: наверняка же я не первый, кому заказчики и работодатели из-за кеша плешь проедают. Вдруг, думаю, что-то в htaccess дописать можно, чтобы запретить кеширование. И точно. :) Спасибо, буду использовать.
Николай 22.06.2013 в 12:47
Дорогой админ, если ты в любом случае вручную проверяешь коментарии, то на кой хрен спрашивать мой емейл? Удали поле ввода имейла при комментировании и будет тебе счастье в виде бОльшего количества активности на сайте
Тарас 22.06.2013 в 12:55
Уважаемый Николай, прежде всего, чтобы Вы получили уведомление на почту об ответе на комментарий. Во вторых, некоторым пользователям отвечаю прямо на email, чтобы не засорять комментарии длинными дискуссиями. Таким образом многие из них стновятся моими друзьями и партнерами. Мне интересно знать о людях которые посещают мой сайт. Почта, это минимум, который я могу требовать от них. Надеюсь, что ответил на Ваш вопрос.
Николай 22.06.2013 в 17:52
Ясно, понятно.
Sfera 29.08.2012 в 05:23
Все это конечно хорошо, однако каким образом настроить браузер не кешировать конкретный сайт так и не раскрыто в теме.
Денис 28.05.2013 в 19:41
А сайт не из страниц состоит???????????
Николай 22.06.2013 в 04:34
В корне сайта в файл "хтаццесс" настройки кинуть - они будут на все файлы и папки распростроняться (кроме тех папок, где лежат свои файлы "хтаццесс" со своими настройками кеширования)
Алекс 26.08.2014 в 14:49
Николай, имелось ввиду, что человек хочет настроить в браузере, чтобы конкретно у него не кэшировался конкретный сайт, причем он пользователь этого сайта а не владелец.
Добавить комментарий
Просмотров: 61183