Отключение кэширования

Использование системы в различных ситуациях, вопросы программирования сценариев.

Модератор: immortal

Ответить
Аватара пользователя
Lerych
Сообщения: 191
Зарегистрирован: Чт дек 14, 2017 8:46 pm
Откуда: Московская область, Серпухов
Благодарил (а): 79 раз
Поблагодарили: 24 раза

Отключение кэширования

Сообщение Lerych » Чт мар 21, 2019 10:26 pm

Открываю тему с отключением кэширования страниц.
Возник вопрос про запрет кэширования для браузера. Данные на некоторых сценах (страницах) с большим количеством динамических элементов (пиктограммы и т.п.) обновляются практически только по F5.
Поиски привели к следующему.
Вариант 1
Отключить кэширование в браузере
Я использую GoogleChrome, в нём нет понятия отключить кэш, только просмотр приват. Отбрасываем пока этот вариант.
Вариант 2
Запретить кэширование страницы с помощью PHP
Практически, все тоже самое, что в случае с HTML, только информацию будем выводить через header заголовки. Вот, как реализовать абсолютный запрет на кэш:

Код: Выделить всё

<?php
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Expires: " . date("r"));
echo "<h1>", date("H:i:s"), "</h1>";
?>
Вариант 3
Запрет на кэширование браузером и прокси-сервером

Код: Выделить всё

<meta http-equiv="Cache-Control" content="no-cache">
Запрет кэширования страницы, только браузером

Код: Выделить всё

<meta http-equiv="Cache-Control" content="private">
Установка кэширования на определенное время, для браузера

Код: Выделить всё

<meta http-equiv="Cache-Control" content="max-age=3600, must-revalidate">
Вариант 4:
Запретить кэширование страницы с помощью .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
<IfModule mod_headers.c>
Header append Cache-Control "no-store, no-cache, must-revalidate"
</IfModule>
# Заголовок Expires
<IfModule mod_expires.c>
ExpiresActive On ExpiresDefault "now"
</IfModule>
Этот вариант тоже пока отбрасываем, весь сайт отключать от кэширования не есть хорошо.
Итого:
Для себя пока остановился на варианте внести строку

Код: Выделить всё

<meta http-equiv="Cache-Control" content="private">
в файл

Код: Выделить всё

\htdocs\templates\application.html
Немного потестирую, отпишусь. Может у кого какие ещё есть идеи?
Ответить