Регистрация
Регистрируясь, вы подтверждаете свое согласие с соглашением об использовании персональных данных.
Восстановление пароля

некорректная отдача Last modified

Страницы: 1  |  2
20.04.2011, 21:30
Гость
Гость

Добрый день.
Столкнулся с проблемой - толи я неправльно запрашиваю дату обновления страницы, толи Netcat некорретно её отдает.
Этот код я ввожу в макет в окно "шаблоны навигации":
Код:
$last_modified = gmdate('D, d M Y H:i:s', strtotime($f_LastUpdated)) . ' GMT'; 
// отправил ли браузер запрос if-modified-since request?
if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])) {
// разобрать заголовок
$if_modified_since = preg_replace('/;.*$/', '', $_SERVER['HTTP_IF_MODIFIED_SINCE']);

if ($if_modified_since == $last_modified) {
// кэш браузера до сих пор актуален
header('HTTP/1.0 304 Not Modified');
header('Cache-Control: max-age=86400, must-revalidate');
exit;
}
}

В результате в заголовке отдается дата Last-Modified: Thu, 01 Jan 1970 00:00:00 GMT
Что я делаю неправильно?
20.04.2011, 21:46
DiGGy
DiGGy
DiGGy

Зарегистрирован:
2005-04-04
Сообщений: 1546

А если убрать ваш код, то что выдается в заголовке?

Temet nosce...
29.12.2012, 00:24
Новиков И.С.
Новиков И.С.

Зарегистрирован:
2012-04-03
Сообщений: 7

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

HTTP/1.1 200 OK
Date: Fri, 28 Dec 2012 20:22:11 GMT
Server: Apache/2.2.16 (Debian)
X-Powered-By: PHP/5.3.3-7+squeeze14
Set-Cookie: sid=f4880031i0ejv4osd825l08k57; path=/; domain=www.netcat.ru
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate
Pragma: no-cache
Cache-Control: post-check=0, pre-check=0
Vary: Accept-Encoding
Connection: close
Content-Type: text/html; charset=windows-1251
Получено: 440 байт
Затрачено: 0,26 сек
29.12.2012, 12:35
Asiat
Аниматика
Asiat

Зарегистрирован:
2005-12-12
Сообщений: 576

$f_LastUpdated наверно пустая, надо ее определить откуда-то.

Разработка сайтов на Netcat с 2006... хм-м ... или 2005 хммм года. В общем, обращайтесь.
29.12.2012, 19:52
Новиков И.С.
Новиков И.С.

Зарегистрирован:
2012-04-03
Сообщений: 7

Задано в настройках отображать предыдущий день.
29.12.2012, 20:57
Новиков И.С.
Новиков И.С.

Зарегистрирован:
2012-04-03
Сообщений: 7

Для внутренних страниц использую такой код:
";
if ($classID) { // если есть компонент
// если мы на странице объекта компонента
if ($message) $LastModified = $db->get_var("SELECT LastUpdated FROM Message$classID WHERE Message_ID = $message");
else if ($cc) $LastModified = $db->get_var("SELECT MAX(LastUpdated) FROM Message$classID WHERE Sub_Class_ID = $cc AND Checked = 1");
if (isset($LastModified) && $LastModified) {
$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: '. gmdate("D, d M Y H:i:s \G\M\T", strtotime($LastModified)));
}
}
echo "
Но для титульной он почему то не работает.
31.12.2012, 09:00
Asiat
Аниматика
Asiat

Зарегистрирован:
2005-12-12
Сообщений: 576

Цитата:
Задано в настройках отображать предыдущий день.

Это настройки сайта которые? Тогда $f_LastUpdated наверно вобще ни при чем, настройки влияли на работу функции send_lastmodified, которая вызывалась в e404.php

Разработка сайтов на Netcat с 2006... хм-м ... или 2005 хммм года. В общем, обращайтесь.
03.01.2013, 18:32
Новиков И.С.
Новиков И.С.

Зарегистрирован:
2012-04-03
Сообщений: 7

Видимо не работает e404.php, по каким то причинам!
Asiat Аниматика кстати, Ваш сайт тоже не отдает Last-Modified, сможете включить что бы проверить, что это не баг NetCat?
06.01.2013, 14:51
Asiat
Аниматика
Asiat

Зарегистрирован:
2005-12-12
Сообщений: 576

Цитата:
кстати, Ваш сайт тоже не отдает Last-Modified, сможете включить что бы проверить, что это не баг NetCat?

Вообще-то, заголовки Last-Modified в каком-то виде отдавались, странно, что вы их не видите.. другое дело, что они были настроены по старинке, вручную.

Цитата:
Видимо не работает e404.php, по каким то причинам!

Провел целое расследование, результаты следущие:
В e404 видно, что строка $nc_core->page->send_lastmodified() сработает, если запрос по протоколу 1.1
Я так-то в стандартах не особо силен, и не знаю, почему для HTTP/1.0 Last-Modified неткатовцы не отдают. Заинтересовало другое: в заголовках вижу HTTP/1.1, а ластмодифая нет.
Оказалось, что nginx с апачем по умолчанию взаимодействуют по 1.0 и переменная $_SERVER['SERVER_PROTOCOL'] показывает как раз HTTP/1.0

В итоге, УРА! стандартная неткэтовская функция заработала после того, как в порядке эксперимента перевел запросы от nginx к апачу на версию 1.1

PS Посмотрел на качество ее работы и вернул все обратно, на ручную отдачу заголовков неуверенный

Разработка сайтов на Netcat с 2006... хм-м ... или 2005 хммм года. В общем, обращайтесь.
10.01.2013, 23:05
Новиков И.С.
Новиков И.С.

Зарегистрирован:
2012-04-03
Сообщений: 7

Аналогично, пока работаю на ручном режим, при этом, после обновления до 5 версии, еще пришлось отключить e404.php, иначе куча ошибок вываливается
#RewriteRule ^(.+)$ /netcat/require/e404.php
Вот только не понял
Код:
перевел запросы от nginx к апачу на версию 1.1

Как это можно сделать?
11.01.2013, 15:06
Asiat
Аниматика
Asiat

Зарегистрирован:
2005-12-12
Сообщений: 576

директива в конфиге nginx proxy_http_version 1.1

Разработка сайтов на Netcat с 2006... хм-м ... или 2005 хммм года. В общем, обращайтесь.
198 196 2013-01-12 14:10:06 11213
Страницы: 1  |  2
Описание проекта