Библиотека программиста

26.11.2024 - Кэширование по содержанию

Еще более интеллектуальный вид управления предоставляет HTTP/1.1 на основе содержимого с помощью директив Vary. Я очень рекомендую применять его при формировании изображений или текстов большого объема, которые как показывает практика изменяются крайне редко.




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

Код
http://www.your.server/viewpic.php3?id=23123



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

PHP - Код
mysql_connect("host""user""passwd");

      
$image=mysql("db"" pics,type from pictures  id=$id");

      
Header("Cache-Control: public, must-revalidate");
      
Header("Vary: Content-ID");
      
Header("Content-ID: ".md5(mysql_result($image0"pics")));

      
Header("Content-type: ".mysql_result($image0"type"));

      echo 
mysql_result($image0"pics");
      
mysql_freeResult($image);
      
mysql_close();

.
.
.
.
.
.
.
.
.
.
.
.
.
.
Для управления используется MD5 сумма содержимого изображения. Пока содержание не изменилось, сумма будет постояной. В случае изменения содержания в базе на сервере клиент выполнит запрос для повторного формирования содержания. Пока изображение постоянно содержимое будет отображаться из кэш.
Опубликовано на сайте: http://www.coders-library.ru
Прямая ссылка: http://www.coders-library.ru/index.php?name=news&op=view&id=60