Drupal 7 добавление заголовков кеширования для нод, Last-Modified и If-Modified-Since

Категория: Drupal
Дата публикации: 9 августа, 2018 - 16:39
Последнее изменение: 9 августа, 2018 - 16:49

По-умолчанию друпал не отдает "правильные" заголовки, которые иногда требуется настроить. Для страниц нод это легко настроить через тему или кастомный модуль.
Это не сработает для страниц, собранных, например, на 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).

Добавить комментарий