Страница 1 из 1

Как настроить ответ сервера Last-Modified

СообщениеДобавлено: 08 июл 2014, 16:00
dankoleg
Здравствуйте!
Помогите пожалуйста правильно настроить ответ сервера Last-Modified для сайта?

Re: Как настроить ответ сервера Last-Modified

СообщениеДобавлено: 08 июл 2014, 18:58
guyasyou
Кстати, а это в с5 есть вообще по умолчанию?

Re: Как настроить ответ сервера Last-Modified

СообщениеДобавлено: 08 июл 2014, 23:01
dankoleg
Если было бы по умолчанию то выдавался бы такой ответ сервера:

Last-Modified найден!

HTTP/1.1 200 OK
Server: nginx
Date: Tue, 08 Jul 2014 18:41:58 GMT
Content-Type: text/html
Content-Length: 12977
Connection: close
Last-Modified: Fri, 27 Jun 2014 12:43:30 GMT
ETag: "15423695-32b1-4fcd0a8122080"
Accept-Ranges: bytes
-----
Получено: 243 байт
Затрачено: 3,37 сек

304 Not Modified найден!

HTTP/1.1 304 Not Modified
Server: nginx
Date: Tue, 08 Jul 2014 18:42:02 GMT
Connection: close
ETag: "15423695-32b1-4fcd0a8122080"
-----
Получено: 137 байт
Затрачено: 3,12 сек

Но без правильных настроек сервер выдает ответ Last-Modified не найден:

Last-Modified не найден!

HTTP/1.1 200 OK
Server: nginx admin
Date: Tue, 08 Jul 2014 18:49:40 GMT
Content-Type: text/html; charset=UTF-8
Connection: close
Vary: Accept-Encoding
X-Powered-By: PHP/5.2.17
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Set-Cookie: CONCRETE5=46a0726662c09fbde561f0811f36bf50; path=/
X-Cache: HIT from Backend
Получено: 413 байт
Затрачено: 0,89 сек

Результат: провалено


Last-Modified найден.JPG

Re: Как настроить ответ сервера Last-Modified

СообщениеДобавлено: 09 июл 2014, 10:34
guyasyou
Сложность вот в чем: откуда вы будете брать время последней правки? Если из страницы(там есть время последней правки стрпаницы) то она не учитывает динамические блоки, типо комментов.
Я бы в эвентах привязался, до загрузки страницы вставлял бы время в хеадер, и, при необходимости, отвечал бы 304м.

Re: Как настроить ответ сервера Last-Modified

СообщениеДобавлено: 09 июл 2014, 12:11
cmsservice
В начало файла elements/header.php Вашей темы оформления вставьте следующий код:

Код: Выделить всё
<?php
$c 
= Page::getCurrentPage();
$vo = $c->getVersionObject();

$LastModified = gmdate("D, d M Y H:i:s", strtotime($vo->getVersionDateCreated())) . ' GMT';
$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 >= strtotime($vo->getVersionDateCreated())) :
    header($_SERVER['SERVER_PROTOCOL'] . ' 304 Not Modified');
    exit;
endif;
header('Last-Modified: '. $LastModified);
?>


И станет все отдавать. Однако, я согласен с guyasyou, что если у Вас изменения делаются не на уровне редактирования страницы, то они не будут видны, браузер будет доставать из кэша. В таком случае, можно предложить два решения:

  1. настроить мета-заголовки таким образом, чтобы браузер принудительно обновлял свой кэш если прошел определенный период с последнего сохранения страницы в кэше.
  2. если данные меняются через single_pages в dashboard, то в коде своего расширения предусмотреть апдейт страниц, содержащих ваше расширение, в случае изменения данных (это в общем не очень сложная задача)

Re: Как настроить ответ сервера Last-Modified

СообщениеДобавлено: 09 июл 2014, 22:08
dankoleg
Здравствуйте1
Код подставил, все заработало.
Большое спасибо.