2.20.19. Сервер не возвращает HTTP-заголовок Last-Modified

Внимание!

Заголовок не будет возвращаться для динамического контента, если активированы какие-либо опции модуля PageSpeed.

Сервера виртуального хостинга по умолчанию возвращают HTTP-заголовок Last-Modified для статического контента (изображения, таблицы стилей, JS-скрипты). Если вы столкнулись с ситуацией, при которой сервер не возвращает этот заголовок, вам стоит проверить, не включена ли опция «SSI» в настройках сайта:

Если опция «SSI» включена, сервер не будет возвращать заголовок для контента, передаваемого веб-сервером Apache. Для статического контента заголовок будет возвращаться в любом случае. Работа технологии SSI обеспечивается благодаря модулям веб-сервера Apache, который мы используем в качестве бекенд-сервера на хостинге. В официальной документации сообщается, что при использовании SSI, заголовок Last-Modified не возвращается, так как рассчитать время последнего изменения для динамического контента сложно.

Для динамического контента (динамические страницы, PHP-скрипты) данный заголовок необходимо передавать самостоятельно. В качестве примера можно использовать следующий код:

<?php
$LastModified_unix = 1294844676; // время последнего изменения страницы
$LastModified = gmdate("D, d M Y H:i:s \G\M\T", $LastModified_unix);
$IfModifiedSince = false;
if (isset($_ENV['HTTP_IF_MODIFIED_SINCE']))
    $IfModifiedSince = strtotime(substr($_ENV['HTTP_IF_MODIFIED_SINCE'], 5)); 
if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE']))
    $IfModifiedSince = strtotime(substr($_SERVER['HTTP_IF_MODIFIED_SINCE'], 5));
if ($IfModifiedSince && $IfModifiedSince >= $LastModified_unix) {
    header($_SERVER['SERVER_PROTOCOL'] . ' 304 Not Modified');
    exit;
}
header('Last-Modified: '. $LastModified);

Проверить работу заголовка и получить дополнительные рекомендации по работе с ним можно на сайте last-modified.com.

Содержание