Php запретить кэширование. Запрет кэширования посредством PHP. Проблема с кешированием в Microsoft Internet Explorer

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

    Контент-менеджмент и особенно web-development сайтов затратные, но потенциально многократно окупаемые сферы. Статистически, большинство лидеров в своих нишах интернет-бизнеса достигли своих позиций за счёт грамотных инвестиций в создание интересного контента и создание мощного ресурса, способного поддерживать и удерживать множество посетителей.

    Грамотный веб-мастеринг успешно повышает или поддерживает следующие характеристики сайта:

  • Стабильность работы сайта. Даже самые развитые интернет-ресурсы не застрахованы от ошибок в доступе, переходе на пустые страницы, багов в работе виджетов или установленных приложений, например, калькуляторов стоимости и потерь в соединении во время посещения страниц или обновления информации. Задача программистов убрать всевозможные подводные камни и обеспечить беспрепятственный доступ к публичному функционалу сайта.
  • Клиент-менеджмент на уровне сайта. Предоставление интересного контента и общение с пользователями привлекает клиентов, увеличивает продолжительность их сотрудничества с вами, делает сайт “живым”, что важно для удержания посетителей и в конечном итоге генерирует доход для вашего ресурса, прямо или опосредованно, то есть за счёт бонусов от имиджа и сервиса.
  • Защита данных сайта. Сюда входит установка DDOS-защиты, спам-фильтров, ликвидация уязвимостей в коде и SQL-запросах. Дополнительно, производится регулярное резервное копирование, как на случай атак на сайт, так и возможных технических неполадок. Стоит отметить и работу с SSL-сертификатами, формально, данный пункт относится к безопасности, хотя интерес для клиента в SSL – это повышение имиджа и репутации сайта в интернете, например, крупные сайты и платёжные системы не сотрудничают без надёжных SSL-сертификатов. К счастью, они доступны всем, кто соответствует критериям безопасного ресурса.
  • Скорость загрузки страниц и ресурсов. Каждая секунда, потраченная на ожидание, плохо сказывается на готовности клиентов и посетителей находиться и взаимодействовать с вашей площадкой. Задача наших администраторов – оптимизировать алгоритмы загрузки и убрать лишние элементы для обеспечения наилучшей скорости при сохранении функционала и красоты сайта.
  • Мы гарантируем конфиденциальность вашей информации. Наши сотрудники примут все необходимые меры по защите ваших данных, вы будете информированы о всех изменениях и нововведениях сайта, а также важной информации относительно поддержки.

Если у вас возникли вопросы, предложения или вы заинтересованы в сотрудничестве, обращайтесь к нашему менеджеру. Надеемся на долгое и плодотворное взаимодействие и успехи для вашего сайта. Удачного дня!

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

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

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

Сделаем следующее, если используется 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”. Поместим данную команду за кавычками адреса файла. Применим изменения.

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


Речь здесь не о том, как запретить кэш лишь в браузере, а о том, как запретить кэширование контента на стороне сервера. Многим наверно известны методы запрета кэширования в заголовках HTML-страниц, например упомянутые в Wikipedia, такие как

Кроме того можно использовать и такие

В первой строке указывается рекомендация запрещать кэширование вообще, а вторая строка указывает браузеру, что страница используется в приватном режиме, поэтому ее содержимое не должно кэшироваться. Мета-теги в третьей и четвертой строках указывают на то, что срок хранения в кэше ограничено временем max-age=10800 (что равно 3-м часам) для браузера и для прокси соответственно.

Приведенные выше в пример рекомендации хороши однако лишь для тех владельцев сайтов, у которых нет доступа к PHP-скриптам, и больше подходят для нединамических страниц. Это, как говорится, «последний шанс», и лишь потому, что многие браузеры, да к тому же их многочисленные версии, все меньше и меньше обращают внимание на то, что прописано в HEAD-секциях страниц сайтов. Каждый из них «тянет одеяло на себя» и не все и не всегда придерживаются каких-то стандартов. Другими словами то, что было сказано выше, может не сработать.

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

Альтернатива этому - запретить кэширование страниц сайта с использованием PHP-скриптов, а именно при помощи функции header(...); , которая позволяет добавлять в заголовки пакетов HTTP необходимые параметры и директивы. На данный момент последние версии популярных браузеров и соответственно серверы более-менее одинаково обрабатывают эти заголовки HTTP-пакетов. В связи с этим более надежным и гибкими способом запрета кэширования будет применение PHP.

Вот пример простого указания сроков кэширования страниц сайта:

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

В некоторых случаях может пригодиться в параметре заголовка использовать дополнительные параметры post-check=0 и pre-check=0

Header("Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0"); ...

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

$echo = " Ссылка "; $echo = "";

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

Проверка, что кэширование отключено

Проверить, кэшируется ли страница или нет, можно с помощью добавления времени сервера, в которое была сгенерирована конкретная страница, непосредственно в код страницы. Это легко сделать с помощью PHP

Время создания страницы: " . date("H:i:s") . ""; ?>

В строке №6 содержится код date("H:i:s") , который показывает точное серверное время, в которое страница была создана. Таким образом, при каждом запросе к странице, при условии, что кэширование полностью отключено, мы всегда будем видеть абсолютно новое время. Если все же кэширование выполняется, то при частых запросах страница будет содержать одно и то же время.

Запрет кэширования страниц средствами Apache .htaccess

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

Добавив в файл.htaccess, который находился в каталоге скриптов веб-чата, следующие установки, я решил проблему:

Header append Cache-Control "no-store, no-cache, must-revalidate" ExpiresActive On ExpiresDefault "now"

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

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

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

ExpiresActive On ExpiresDefault "now" Header append Cache-Control must-revalidate ExpiresDefault "now"

Кроме того, Вы сможете указывать время ограничения кэширования, например:

ExpiresDefault "access plus 1 month" # или # ExpiresDefault "access plus 4 weeks" # или # ExpiresDefault "access plus 30 days"

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

ExpiresByType text/html "access plus 1 month 7 days 12 hours" ExpiresByType image/gif "modification plus 3 hours 15 minutes"

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

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


В настоящее время скорость передачи данных в сети интернет позволяет с легкостью просматривать видео в хорошем качестве, играть в 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», которые не только не запрещают кэширование, но и возможно способны препятствовать нормальной индексации сайта поисковыми роботами.




Top