Примеры использования HTTP/1.1 304 Not Modified

Для разгрузки канала клиента за счет кеширования браузером страниц можно использовать следующий код, позволяющий браузеру не загружать те страницы, которые у него уже есть в кэше. Аналогично можно сделать и для изображений. C помощью директив файла .htaccess сделана настройка чтобы все файлы с сервера отправлялись через index.php:

$url    = $_SERVER['REQUEST_URI'];
if($url==""||$url=="/")
   $url="index.htm" ;
else $url=substr($url, 1);

if ( !file_exists( $url ) )     { header("HTTP/1.0 404 Not Found"); exit();}

// Получаем время последней модификации кэш-файла
$lastModified = max(filemtime($url),filemtime('index.php')); $slastModified = gmdate('D, d M Y H:i:s', $lastModified) . ' GMT';
// Выдаём заголовок HTTP Last-Modified
header('Last-Modified: ' . $slastModified );
// Получаем заголовки запроса клиента - только для Apache
$headers = getallheaders();
if (isset($headers['If-Modified-Since'])) {  // Разделяем If-Modified-Since (Netscape < v6 отдаёт их неправильно)
   $modifiedSince = explode(';', $headers['If-Modified-Since']);
   // Преобразуем запрос клиента If-Modified-Since в таймштамп
   $modifiedSince = strtotime($modifiedSince[0]);
   // Сравниваем время последней модификации контента с кэшем клиента
   if ($lastModified <= $modifiedSince) { header('HTTP/1.1 304 Not Modified'); exit(); } // Разгружаем канал передачи данных!
   }
echo "<!DOCTYPE html>\n<html>\n";
echo "<head>\n";
echo "<meta charset=\"utf-8\">\n";
echo "<meta http-equiv=\"Last-Modified\" content=\"".$slastModified."\">\n";

.htaccess:

RewriteEngine On
RewriteCond %{REQUEST_URI} !index\.php$
RewriteCond %{REQUEST_URI} !\.jpg$
RewriteCond %{REQUEST_URI} !\.gif$
RewriteCond %{REQUEST_URI} !\.png$
RewriteCond %{REQUEST_URI} !\.js$
RewriteCond %{REQUEST_URI} !\.txt$
RewriteCond %{REQUEST_URI} !\.xml$
RewriteCond %{REQUEST_URI} !\.html$
RewriteCond %{REQUEST_URI} !\.htm$
RewriteCond %{REQUEST_URI} !\.mid$
RewriteCond %{REQUEST_URI} !\.avi$
RewriteCond %{REQUEST_URI} !\.css$
RewriteRule ^(.*)$ /index.php [L]

Подробнее о .htaccess можно почитать здесь


.