[PHP] Урок: Написание Cкриптов с Учетом Кеширования - Форум Cheat-Master.ru
  • Страница 1 из 1
  • 1
Модератор форума: Sanoxxx, Alowir  
[PHP] Урок: Написание Cкриптов с Учетом Кеширования
[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 ВЗЛОМАН, НЕ РАБОТАЙТЕ СОМНОЙ. МНЕ ВСЁ ВЗЛОМАЛИ СКАЙП И ВК. СКАЙП ВОССТОНОВИЛ.
  • Страница 1 из 1
  • 1
Поиск:
Статистика Форума
Лучшие пользователи
Admin [39113]

GеNius [7210]

[CM]Russel [5557]

kenlo763 [4952]

[CM]AGRESSOR [4639]

Snake_Firm [4452]

Сэс [4416]

Artem_Buero [4223]

[CM]Durman [3204]

[CM]Рафаэль [3080]

iMaddy [2855]

sky_Woker [2854]

getrekt [2745]

Новые пользователи
wyatzz1313 [18:45]

Stankeev [16:00]

Lum1x [15:50]

NightMusicant [12:32]

douoling652 [10:40]

billienq1 [01:47]

staciah1 [01:15]

maksmovictimofej [00:18]

jamiedv6 [21:25]

billieds7 [20:51]

aprilez9 [15:57]

am9350450 [14:36]

dcvfre [11:04]