Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » Многострадальный Last-Modified

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2

Открыть новую тему     Написать ответ в эту тему

koreets2011



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Добрый вечер, что то погуглил я, и тут в поиск забил. Ничего похожего не встретил.
Собственно проблема

Код:
 
HTTP/1.1 200 OK
Date: Fri, 12 Dec 2014 17:25:03 GMT
Server: Apache/2.2.15 (CentOS)
X-Powered-By: PHP/5.4.33
Last-Modified: Wed, 12 Jan 2011 15:04:36 GMT
Content-Type: text/html; charset=utf-8
Age: 3440
X-Cache: HIT from t1.hoster.ru
X-Cache-Lookup: HIT from t1.hoster.ru:6666
Connection: close
 

Это что за подстава?
это в каждой php странице

Код:
 
$LastModified_unix = strtotime(date("D, d M Y H:i:s", filectime($_SERVER['SCRIPT_FILENAME'])));
 

это в header.php

Код:
 
$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;
}
 

 
Откуда 2011 год???

Всего записей: 410 | Зарегистр. 13-10-2011 | Отправлено: 21:28 12-12-2014
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
koreets2011
весь приведенный код не показывает как и где этот заголовок формируется.

Всего записей: 15040 | Зарегистр. 20-09-2014 | Отправлено: 22:43 12-12-2014
koreets2011



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Код:
 
$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_unix);
}  
 

Это в header.php формируется.
А каждая страница подгружается аяксом, но если по прямой ссылке(как бот) то попутно с контентом, титлом, кейвордсами, дискрипшинами в header.php идет  

Код:
 
$LastModified_unix = strtotime(date("D, d M Y H:i:s", filectime($_SERVER['SCRIPT_FILENAME'])));  
 

И мы получаем нормальный заголовок проверил. Но при обращении к серваку получаем
304 Not Modified
 
Вот так подстава, в чем дело не пойму
 
 
 
Добавлено:
Может кэш какой нибудь?

Всего записей: 410 | Зарегистр. 13-10-2011 | Отправлено: 22:50 12-12-2014
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
koreets2011

Цитата:
header('Last-Modified: '. $LastModified_unix);

никогда не дойдет.
 

Цитата:
Но при обращении к серваку получаем  
304 Not Modified  

и что не так?

Всего записей: 15040 | Зарегистр. 20-09-2014 | Отправлено: 22:52 12-12-2014 | Исправлено: Mavrikii, 22:53 12-12-2014
koreets2011



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Это почему?

Всего записей: 410 | Зарегистр. 13-10-2011 | Отправлено: 22:53 12-12-2014
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
koreets2011

Цитата:
Это почему?

да потому, что exit перед этим написан.  
выполнение кода до той строчки никогда не дойдет.

Всего записей: 15040 | Зарегистр. 20-09-2014 | Отправлено: 22:53 12-12-2014
koreets2011



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Что не так? Да если я секунду назад страницу обновил а он мне 304 Not Modified

Всего записей: 410 | Зарегистр. 13-10-2011 | Отправлено: 22:54 12-12-2014
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
koreets2011

Цитата:
Да если я секунду назад страницу обновил а он мне 304 Not Modified

ну так выведите для себя значения $LastModified,  $LastModified_unix и $IfModifiedSince и сравните что получается.
 

Всего записей: 15040 | Зарегистр. 20-09-2014 | Отправлено: 22:55 12-12-2014 | Исправлено: Mavrikii, 22:59 12-12-2014
koreets2011



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Код:
 
if ($IfModifiedSince && $IfModifiedSince >= $LastModified_unix) {
header($_SERVER['SERVER_PROTOCOL'] . ' 304 Not Modified');
exit;
}
header('Last-Modified: '. $LastModified_unix);
 

Sorry это я в попыхах, так закопипастил, в header.php все правильно.
 
Добавлено:
Just moment...

Всего записей: 410 | Зарегистр. 13-10-2011 | Отправлено: 22:56 12-12-2014
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
koreets2011

Цитата:
filectime

а может, все же, filemtime?? раз уж не создаете файл, а модифицируете.

Всего записей: 15040 | Зарегистр. 20-09-2014 | Отправлено: 22:59 12-12-2014
koreets2011



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
$LastModified = Fri, 12 Dec 2014 19:34:05 GMT
$IfModifiedSince = пусто

Всего записей: 410 | Зарегистр. 13-10-2011 | Отправлено: 23:00 12-12-2014
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
koreets2011

Цитата:
$IfModifiedSince = пусто

значит браузер не отправляет ничего, скорее всего.
но основная проблема выше - время создания файла не меняется, меняется время модификации файла.

Всего записей: 15040 | Зарегистр. 20-09-2014 | Отправлено: 23:01 12-12-2014
koreets2011



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Как быть, что делать? Я так ботов никогда не заманю

Всего записей: 410 | Зарегистр. 13-10-2011 | Отправлено: 23:01 12-12-2014
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
koreets2011

Цитата:
Как быть, что делать?

проверьте через var_dump значение $IfModifiedSince, а не через echo.
может strtotime не может распознать строку.

Всего записей: 15040 | Зарегистр. 20-09-2014 | Отправлено: 23:03 12-12-2014
koreets2011



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Пусто

Всего записей: 410 | Зарегистр. 13-10-2011 | Отправлено: 23:07 12-12-2014
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
koreets2011

Цитата:
Пусто

покажите, что выводит var_dump, скопируйте

Всего записей: 15040 | Зарегистр. 20-09-2014 | Отправлено: 23:11 12-12-2014
koreets2011



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Так, я в шоке сейчас, удалил все что отвечало за это дело.
Затем залил файл на хостинг, опять переписал, залил и

Код:
 
HTTP/1.1 200 OK
Date: Fri, 12 Dec 2014 20:19:08 GMT
Server: Apache/2.2.15 (CentOS)
X-Powered-By: PHP/5.4.33
Last-Modified: Fri, 12 Dec 2014 18:17:26 GMT
Content-Type: text/html; charset=utf-8
Age: 3
X-Cache: HIT from t1.hoster.ru
X-Cache-Lookup: HIT from t1.hoster.ru:6666
Connection: keep-alive
 

 
И *** как так можно работать???
 
Добавлено:
Проверил 5 страниц, выдает время последней правки страницы...
Mavrikii спасибо огромное за участие.




За речью следите. Нарушение п. 2.3. главы VIII Соглашения по использованию

Всего записей: 410 | Зарегистр. 13-10-2011 | Отправлено: 23:20 12-12-2014
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
koreets2011

Цитата:
X-Cache: HIT from t1.hoster.ru  
X-Cache-Lookup: HIT from t1.hoster.ru:6666  

у хостера есть свой кэширующий фронтенд.

Всего записей: 15040 | Зарегистр. 20-09-2014 | Отправлено: 23:22 12-12-2014
koreets2011



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Теперь как можно убедиться на 100%, что после правки страницы сервер не вернет 304 Not Modified?
http://last-modified.com/ - как то криво работает, то говорит что сервак не вернул 304, то вернул.
А сейчас вообще одно и то же даже время не меняет.

Всего записей: 410 | Зарегистр. 13-10-2011 | Отправлено: 23:30 12-12-2014
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
koreets2011

Цитата:
что после правки страницы сервер не вернет 304 Not Modified?

нажать в браузере ctrl+f5
тогда браузер не будет отправлять if-modified-since
 
а иначе - нужно смотреть, может это фронтэнд вообще из кэша своего возвращает.
 
плюс смотрите на Age поле

Цитата:
    The Age response-header field conveys the sender's estimate of the
      amount of time since the response (or its revalidation) was
      generated at the origin server. A cached response is "fresh" if
      its age does not exceed its freshness lifetime. Age values are
      calculated as specified in section 13.2.3.
           Age = "Age" ":" age-value
           age-value = delta-seconds
      Age values are non-negative decimal integers, representing time in
      seconds.
      If a cache receives a value larger than the largest positive
      integer it can represent, or if any of its age calculations
      overflows, it MUST transmit an Age header with a value of
      2147483648 (2^31). An HTTP/1.1 server that includes a cache MUST
      include an Age header field in every response generated from its
      own cache. Caches SHOULD use an arithmetic type of at least 31
      bits of range.

Всего записей: 15040 | Зарегистр. 20-09-2014 | Отправлено: 23:34 12-12-2014 | Исправлено: Mavrikii, 23:35 12-12-2014
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2

Компьютерный форум Ru.Board » Интернет » Web-программирование » Многострадальный Last-Modified


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru