Last-Modified - передает клиенту время последнего изменения документа
HTTP заголовок Last-Modified (последние изменения) передает клиенту время последнего изменения документа (веб-страницы). Клиент (браузер или поисковый робот) отправляет серверу заголовок «If-Modified-Since» и если дата последнего изменения страницы совпадает, сервер возвращает заголовок «304 Not Modified» и не загружает страницу. Если время последнего изменения отличается (или last modified header не настроен) — сервер возвращает заголовок «200 OK» и загружает страницу. То есть вместо повторной перезагрузки страницы и обновления кеша, клиент получает всего лишь заголовок 304. Клиент экономит трафик, а сервер отдает меньше данных — обоюдная экономия.
Meta Last-Modified для статичных html страниц
<metahttp-equiv="Last-Modified"content="Sun, 11 Sep 2001 17:31:28 GMT">
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 .htaccess
RewriteRule .* - [E=HTTP_IF_MODIFIED_SINCE:%{HTTP:If-Modified-Since}] RewriteRule .* - [E=HTTP_IF_NONE_MATCH:%{HTTP:If-None-Match}]
Last-Modified nginx + php
location ~ \.php$ { … if_modified_since off; fastcgi_pass fcgi; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /<путь > /web$fastcgi_script_name; … fastcgi_pass_header Last-Modified; include fastcgi_params; }
Проверка корректности заголовка Last-Modified
<?php $ch = curl_init(); $url = 'http://site.ru/1.php '; curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HEADER, true); curl_setopt($ch, CURLOPT_NOBODY, true); curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'If-Modified-Since: Sun, 01 Sep 2001 17:33:22 GMT' )); ob_start(); curl_exec ($ch); curl_close ($ch); $data = ob_get_contents(); ob_end_clean(); echo nl2br($data); ?>