[CM]Jaxson |
Дата: Пятница, 12.10.2012, 22:04 | Сообщение # 1
|
٩(̾●̮̮̃̾•̃̾)۶
Сообщений: 801
Статус: Offline
|
По просьбе одного посетителя сайта, посвящаю этот шаг вопросу кеширования страниц веб-браузерами и прокси-серверами. Интересная тема, и вобщем-то достаточно актуальная для создания динамических страниц, которые обновляют свое содержимое при каждом обращении. Во времена "статического" Интернета, которые местами еще не закончились, кеширование страниц приносило экономию трафика и быстроту работы. Прокси-сервера провайдеров делали работу в Интернете быстрее. Сегодня ситуация поменялась кардинально, часто функции кеширования в браузерах и прокси-серверах только мешают нормальной работе.
Максимальная продолжительность хранения страницы в кеше браузера пользователя нам скорее всего неподвластна, так как она зависит от настроек браузера, занятости диска и других параметров. Конечно можно сообщить браузеру о том, какое время страница точно не станет меняться, но сколько она при этом будет храниться в кеше не известно.
Зато практически со 100% уверенностью можно сказать браузеру и прокси о том, что страницу не стоит куда-либо сохранять. Для этого в протоколе HTTP есть несколько полей заголовка:
Expires - время жизни страницы; Last-Modidied - дата последнего изменения; Cache-Control - параметры управления кешем; Pragma - тоже самое для версии 1.0; Подбирая значения этих полей можно управлять процессом кеширования страницы. Например, если дата последнего изменения страницы Last-Modified меньше, чем ее время жизни Expires, то браузер посчитает весьма закономерным поместить эту страницу в кеш. Если мы насильно поменяем значения этих полей, чтобы такое сравнение больше не проходило, то браузер перестанет кешировать эту страницу. Для вывода заголовков HTTP в PHP существует специальная функция header(), в описании которой в качестве примера приведен именно процесс контроля кешем:
<?php // Date in the past header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
// always modified header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
// HTTP/1.1 header("Cache-Control: no-store, no-cache, must-revalidate"); header("Cache-Control: post-check=0, pre-check=0", false);
// HTTP/1.0 header("Pragma: no-cache"); ?> Если Вы будет вставлять этот код в начало каждого PHP файла, то он не будет кешироваться.
Этот код на Internet Explorer действует безотказно, зато почему-то не всегда на Opera и Firefox, возможно и на другие браузеры. Алгоритм их работы не всем известен, и возможно они игнорируют некоторые поля в заголовках ответов HTTP. Тогда в таком случае можно попробовать продублировать эти настройки в коде HTML, про это вы можете подробнее почитать в "Шаг 5 - Что умеет <head> ?".
Например можно создать такой код:
<?php echo "<meta http-equiv=\"cache-control\" content=\"no-store, no-cache, must-revalidate\">"; echo "<meta http-equiv=\"expires\" content=\"Mon, 26 Jul 1997 05:00:00 GMT\">"; echo "<meta http-equiv=\"last-modified\" content=\"". gmdate("D, d M Y H:i:s") . " GMT\">"; ?> Не знаю, перебор ли это, но делая вывод этого HTML скорее всего можно сказать, что практически все браузеры должны срабатывать, по крайней мере те, которые хоть как-то считаются со стандартами.
[ Skype ] [ Профиль ] [ Mods Pack ] [ VK ] [ Геймеры ] Помогаю новичкам, по всем вопросом комне в Skype/VK. VK ВЗЛОМАН, НЕ РАБОТАЙТЕ СОМНОЙ. МНЕ ВСЁ ВЗЛОМАЛИ СКАЙП И ВК. СКАЙП ВОССТОНОВИЛ.
|
|
|
|