все просто
допустим, у вас есть статья на сайте.
у статьи есть дата публикации - LastModifiedDate.
мы можем на этапе формирования конечного html-кода страницы проверить, была ли ранее просмотрена эта статья или нет в этом браузере.
если статья была ранее просмотрена - отдаем 304 заголовок и все.
304 Not Modified — сервер возвращает такой код, если клиент запросил документ методом GET, использовал заголовок If-Modified-Since или If-None-Match и документ не изменился с указанного момента. При этом сообщение сервера не должно содержать тела.
Вот пример кода из реального проекта:
class Http_Request {
/**
* Возвращает TRUE, если дата (обычно документа) $data является устаревшей
* по отношению к HTTP заголовку If-Modified-Since.
*
* @param $date DateTime
* @return boolean
*/
public static function IfModifiedSince(DateTime $date)
{
if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE']))
{
$if_modified_since = strtotime(substr($_SERVER['HTTP_IF_MODIFIED_SINCE'], 5));
if ($if_modified_since && $if_modified_since >= $date->getTimestamp())
{
return false;
}
}
return true;
}
//....
}
// на уровне контроллера
// дата не изменилась - отдаем 304 заголовок, браузер возьмет страницу из кэша
if (!Http_Request::IfModifiedSince($advert->getLastModifiedDate()))
{
$this->getResponse()->setHttpStatusCode(304);
exit;
}
// дата была изменена - ставим заголовок Last-Modified с актуальной датой статьи
$this->getResponse()->setHeader('Last-Modified', $advert->getLastModifiedDate()->formatHttpDate());
$this->getResponse()->setHeader('Cache-Control', 'no-cache, must-revalidate');
Как посмотреть. Если у тебя есть в браузере расширение live http headers, можешь отследить заголовки на этой странице -
www.adverts.ru/advert/79941.xhtml
В первый заход на эту страницу будут такие заголовки:
заголовки запроса:
GET /advert/79941.xhtml HTTP/1.1
заголовки ответа:
HTTP/1.1 200 OK
Last-Modified: Tue, 12 Apr 2016 17:13:03 GMT
при втором заходе:
заголовки запроса:
GET /advert/79941.xhtml HTTP/1.1
If-Modified-Since: Tue, 12 Apr 2016 17:13:03 GMT
заголовки ответа:
HTTP/1.1 304 Not Modified