Сайт о телевидении

Сайт о телевидении

» » Php запретить кэширование. Запрет кэширования посредством PHP

Php запретить кэширование. Запрет кэширования посредством PHP

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

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

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

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

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

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

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

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

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

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

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

", date("H:i:s"), ""; ?>

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

", date("H:i:s"), ""; ?>

Запретить кэширование страницы с помощью.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 Header append Cache-Control "no-store, no-cache, must-revalidate" # Заголовок Expires ExpiresActive On ExpiresDefault "now"

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

# Заголовок Cache-Control Header append Cache-Control "public" # Заголовок Expires ExpiresActive On ExpiresDefault "access plus 1 hours"

Заключение

Сколько раз писано и переписано о тэге … Казалось бы, все! Хватит! Закрыли тему! Но нет! Ведь не все сказали! Вернее, кое-где все, но это попробуй найди еще. Потыкайся во всякие Rambler’s и Яndex’ы…

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

Всем известно, что разных версиях протоколов HTTP применяются свои директивы управления кэшированием. Cache-Control — директива протокола HTTP/1.1. А параметры у нее вот такие:

Все перечисленные атрибуты (кроме взаимоисключающих) можно перечислять через запятую. Понимаю, не все ясно, сейчас кое-что поясню.

1. Запрет на кэширование вообще (документ не будет кэшироваться ни proxy-сервером, ни браузером):

2. Документ будет кэшироваться браузером, но не будет кэшироваться proxy-сервером.

3. Документ будет кэшироваться, даже если и не должен, вроде бы, при обычных обстоятельствах.

4. Документ кэшируется, но не сохраняется в архиве.

5. Можно прямо сказать браузеру: «Обнови-ка мне эту страницу». (В параметре max-age указано, на сколько секунд кэшируется документ). Может быть полезно при использовании PHP для програмного обновления страниц.

6.А можно сказать это только прокси-серверу.

В наследство от протокола HTTP 1.0 нам достался очень простой способ управления кэшированием, определяется директивой Pragma. Данная штука является общей директивой заголовка HTTP-сообщения в HTTP/1.0, и других значений, кроме no-cahce, не имеет:

В протоколе HTTP 1.1 данная директива заменена директивой Cache-Control со значением no-cache. Большинство серверов и клиентов поддерживают эту директиву и правильно ее отрабатывают.

Для запрета на кэширование иногда не достаточно применения директив управления кэшированием. Так Netscape кэширует документы или их компоненты даже при наличии директив Cache-Control и Pragma. Для того, чтобы заставить перечитать компонент страницы (он ведь получается с сервера по самостоятельному HTTP-запросу) можно установить директиву Expires.

Вот такой вот получился разговор о кэшировании. А с тэгом META мы еще встретимся. И не раз…

Хорошо Плохо

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

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


В настоящее время скорость передачи данных в сети интернет позволяет с легкостью просматривать видео в хорошем качестве, играть в online-игры, устраивать конференции, быстро скачивать и передавать информацию и т.д. Но так было не всегда! Десять лет назад, чтобы передать 1 Мб информации, приходилось тратить достаточно много времени. Для повышения скорости загрузки страниц сайта было решено сохранять часть данных в кэш браузера (памяти) на локальном компьютере пользователя. Во время последующего обращения к сайту браузер загружал их оттуда при условии, что загружаемые данные не менялись.

Сейчас содержание данных в кэше браузера не является столь востребованным в целях увеличения скорости загрузки. В большинстве случаев данные с сервера запрашиваются методами GET или HEAD. Запросы методами GET и HEAD по умолчанию кэшируются (сохраняются) в логах сервера и прокси-сервера, а также в истории браузера. Из-за того, что информация кэшируется, многие посетители сайта увидят устаревшие данные, а новая станет им доступна только после удаления из кэша. Это может доставить проблемы не только посетителям сайта, но и повлиять на прибыль компании, если сайт коммерческий.

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

Самые распространенные правила опубликованы на авторитетных ресурсах www.spravkaweb.ru (http://www.spravkaweb.ru/php/sovet/nocash) и www.ru.wikipedia.org (http://ru.wikipedia.org/wiki/Мета-теги). Многие сайты позаимствовали эти настройки и используют их сейчас.

По утверждению Википедии, если в заголовке документа написать

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

При данных настройках сервер отдает заголовки, представленные на рис.3.

Рис.3 Заголовки ответа сервера

Разберем каждую строчку, чтобы понять, как это должно работать.

Заголовок актуальности документа предлагается передать прошедшей датой. Например, «Expires: Mon, 26 Jul 1997 05:00:00 GMT», определив, тем самым, что данные уже не нужны, и кэшировать их не за чем. Это, должно вызывать подозрение не только у людей, но и у поисковых роботов при индексации таких документом. Зачем роботу держать в индексе неактуальную информацию, мало кто задумывается. Поисковые системы не любят, когда им пытаются передать недостоверные данные.

Заголовок «Last-Modified» передает браузеру дату и время изменения документа (в данном примере дата и время будут текущие). Если при каждом заходе на страницу поисковому роботу сообщается, что документ только что изменился (хотя в своем поисковом индексе робот различий не замечает), то, возможно, система будет воспринимать это как воздействие на релевантность поисковой выдачи с целью улучшения позиций сайта. Это может послужить причиной наложения санкций со стороны поисковых систем.

Передача заголовка «Pragma: no-cache» для запрета кэширования данных была одним из первых методов, но на данный момент уже не работает.

Эксперимент

Пример 1.

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

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

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

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

Пример 2.

В первом примере предлагалась передача заголовка «Cache-Control: no-cache, must-revalidate», вот только настроен он был неправильно. Дополним заголовок новыми параметрами «Cache-Control: no-cache, no-store, must-revalidate, max-age=0», где

no-store - приватные данные нельзя сохранять на локальном диске (запрещает кэширование в браузерах);

no-cache - директива, использующаяся для запрета кэширования информации прокси-серверами;

max-age=0 - директива, указывающая время, в течение которого хранится информация в кэше браузера;

must-revalidate - директива, сообщающая браузеру о требовании дополнительной проверки актуальности документа, в случае возникновения сомнений.

Создадим документ cache2.php, в котором будем отдавать новые заголовки, чтобы проверить работает ли этот метод запрета кэширования данных.

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

Так как при каждом обращении к странице время обновляется, метод запрета кэширования действительно работает. В данном примере параметры передаются из самой страницы, но возможен более универсальный вариант, который настраивается на сервере. На сервере Apache настройки производятся через служебный файл.htaccess, это дает более функциональный механизм запрета кэширования сразу для всех страниц сайта. В файле конфигурации необходимо включить модули mod_headers.c и mod_expires.c, убрав комментарии с фрагмента кода

и добавить в файл.htaccess фрагмент кода

Если сервером является Internet Information Services (IIS) 6.0, то кэширование можно запретить только имея доступ непосредственно к интерфейсу сервера. Сделать это возможно во вкладке «Заголовки HTTP» (HTTP Headers) в настройках сервера.

На рис. 6 приведен пример запрета кэширования посредством передачи заголовков «Cache-Control: no-cache, no-store, must-revalidate, max-age=0» для страниц сайта. Для настройки заголовка «Expires» нужно включить «Установить срок действия содержимого» (Enable content expiration) и «истекает немедленно» (Expires immediate).

Минусы запрета кэширования

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

Заключение

Своевременное получение информации играет значимую роль как для посетителей сайта, так и для их владельцев. Поэтому владельцам веб-ресурсов нужно тщательно анализировать заголовки, которые отдаются их серверами. Запрет кэширования является важной настройкой, которая позволяет посетителям всегда получать только реальную информацию с вашего сайта. Сейчас на большинстве интернет-ресурсов отдаются заголовки «Expires» и «Last-Modified», которые не только не запрещают кэширование, но и возможно способны препятствовать нормальной индексации сайта поисковыми роботами.

Как запретить кэширование?

Ответ мастера:

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

Сделаем следующее, если используется Mozilla Firefox. В адресную строку браузера вписываем opera:config. Появится окно, которое предупредит о том, что нужно быть предельно острожным. Нажмем «Ок». Находим «Фильтр», там набираем browser.cache. После этого в настройках останется не более десяти строчек.

Для отключения кэширования найдем browser.cache.disk.enable и browser.cache.memory.enable. Заострим внимание на поле значения. Обе этих строчки имеют значение true. Изменим его на false. После этого перезапустим браузер, для того чтобы все изменения вступили в силу. 2.Сделаем следующее, если используется Internet Explorer. В меню откроем «Сервис», далее жмем по окно «Свойства обозревателя». Откроется окно свойств браузера. Переходим к вкладке «Общие», там нажимаем «Параметры».

Затем в селекторе «Проверять наличие обновления сохраненных страниц» выберем «Никогда». Для запрета кэширования поставим ноль возле окна «Используемое место на диске». После этого нажимаем «Ок» для принятия изменений.

Если используется Opera. Нажмем клавиши Ctrl+F12, далее выберем «Общие настройки». Перейдем к вкладке «Расширенные», потом к «Истории». Вкладке «Кэш в памяти», а также «Дисковый кэш» присвоим значение «Отключено» для отмены кэширования. В окнах «Проверять документы» и «Проверять изображения» выберем «Никогда». Далее «Ок», изменения вступят в силу.

Если используется Google Chrome. Нажмем правой кнопкой мышки на ярлык запуска браузера. После появления контекстного меню выберем окно «Свойства». После этого в появившемся окне перейдем на вкладку «Ярлык». В окне, где указан адрес файла, допишем “-disk-cache-size=0-media-cache-size=0”. Поместим данную команду за кавычками адреса файла. Применим изменения.