По-умолчанию друпал не отдает "правильные" заголовки, которые иногда требуется настроить. Для страниц нод это легко настроить через тему или кастомный модуль.
Это не сработает для страниц, собранных, например, на views, и прочих вариантах, когда страница не является нодой и реальная дата изменения у которой отсутствует. При необходимости это тоже решается, например, выводом в заголовок значения "текущая дата минус N дней".
Пример для нод с использованием в template.php:
function THEMENAME_preprocess_html(&$vars)
{
//если аноним, то добавляем заголовки
if(user_is_anonymous()){
_custom_add_header();
}
}
function THEMENAME_preprocess_node(&$vars) {
if(isset($vars['changed'])){
//заголовок Last-Modified, который берется из даты изменения ноды
drupal_add_http_header('Last-Modified', gmdate("D, d M Y H:i:s \G\M\T", $vars['changed']));
//обработка для запроса If-Modified-Since
if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) && strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']) >= $vars['changed'])
{
header('HTTP/1.0 304 Not Modified');
_custom_add_header();
exit;
}
}
}
//Своя функция для добавления заголовков Vary, Expires, Cache-Control. Так же можно добавить любые другие необходимые.
function _custom_add_header()
{
drupal_add_http_header('Vary', 'User-Agent');
drupal_add_http_header('Expires', gmdate("D, d M Y H:i:s \G\M\T", date(time()) + 86400));
drupal_add_http_header('Cache-Control', 'max-age=86400, must-revalidate');
}
На заголовки кеширования для изображений, css, js можно повлиять через .htaccess или конфигурационные файлы сервера (nginx/apache2).
Добавить комментарий