LiveInternetMail.ru
Форум русской поддержки Joomla!® CMS
27.05.2012, 00:54:08 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
   
   Начало   Поиск Joomla 1.7 FAQ Joomla 1.5 FAQ Joomla 1.0 FAQ Правила форума Новости Joomla Войти Регистрация Помощь  
Страниц: [1]   Вниз
  Добавить закладку  |  Печать  
Автор Тема: Как правильно настроить обработку запроса If-Modified-Since  (Прочитано 1362 раз)
0 Пользователей и 2 Гостей смотрят эту тему.
colors
Завсегдатай
*****

Репутация: +0/-0
Offline Offline

Сообщений: 415


« : 20.01.2011, 11:12:48 »

Есть подозрения, если верить Яндексу, что сайт на 1.3.0.4 неверно (или вообще не) обрабатывает запрос If-Modified-Since, когда этим интересуется браузер пользователя или поисковая машина. В идеале сайт должен отдавать код 304 если поступил запрос If-Modified-Since, если страница с указанной в запросе даты не изменялась
Где бы в Joostina поглядеть этот момент

Интересуюсь, т.к. такая манипуляция, если на сайте много страниц, заметно повышает скорость индексации нового на сайте, и лишний раз дает возможность браузеру брать у себя из кеша, а не лезть на сервер по любому поводу
Записан
boston
Moderator
*****

Репутация: +222/-3
Offline Offline

Пол: Мужской
Сообщений: 2699



« Ответ #1 : 20.01.2011, 23:38:53 »

Не помню что бы где-то в движке были конкретные действия для обработки If-Modified-Since, даже не знаю что это если честно Azn
Записан
colors
Завсегдатай
*****

Репутация: +0/-0
Offline Offline

Сообщений: 415


« Ответ #2 : 21.01.2011, 10:52:22 »

Не помню что бы где-то в движке были конкретные действия для обработки If-Modified-Since, даже не знаю что это если честно Azn
я тоже не знал, сайт стал искать почему новое на сайте Яндекс медленно читает, а он все подряд страницы видит как вновь созданные, отдает текущую дату.
смысл в общем в том, что при первом обращении браузера к странице он запрашивает Last-Modified, а второй раз к той же странице - запрашивает If-Modified-Since, и если не менялось, должен отдать код 304, тогда браузер берет у себя из кеша, ну и поисковики при индексации этим активно пользуются

Почитал, в теории это выглядит примерно так:

Код
// Получаем время последней модификации кэш-файла
$lastModified = filemtime($cache->_file);
 
// Выдаём заголовок HTTP Last-Modified
header('Last-Modified: ' . gmdate('D, d M Y H:i:s', $lastModified). ' GMT');
 
// Получаем заголовки запроса клиента – только для Apache
$request = getallheaders();
 
if (isset($request['If-Modified-Since'])) {
// Разделяем If-Modified-Since (Netscape < v6 отдаёт их неправильно)
$modifiedSince = explode(';', $request['If-Modified-Since']);
 
// Преобразуем запрос клиента If-Modified-Since в таймштамп
$modifiedSince = strtotime($modifiedSince[0]);
} else {
// Устанавливаем время модификации в ноль
$modifiedSince = 0;
}
 
// Сравниваем время последней модификации контента с кэшем клиента
if ($lastModified <= $modifiedSince) {
// Разгружаем канал передачи данных!
header('HTTP/1.1 304 Not Modified');
exit();
}
 
?>


Накопал в 1.3.0.4 по поиску "304" такие файлы:

includes\libraries\cache\handler\page.php
Код
function checkNotModified($send304=true) {
$client_etag = isset($_SERVER['HTTP_IF_NONE_MATCH'])? stripslashes($_SERVER['HTTP_IF_NONE_MATCH']) : false;
$client_last_modified = isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])? stripslashes($_SERVER['HTTP_IF_MODIFIED_SINCE']) : false;
if(($client_etag==false)&&($client_last_modified==false))
return false;
$notmodified = false;
$etag = '"'.$this->_hash.'"';
if(($client_last_modified!==false)&&(($pos=strpos($client_last_modified,';'))!==false))
$client_last_modified=substr($client_last_modified,0,$pos);
if($client_etag===$etag)
$notmodified = true;
elseif(($client_last_modified!==false)&&(strtotime($client_last_modified) == $this->_content_modified))
$notmodified = true;
if($notmodified && $send304) {
@ob_clean();
$http1x = isset($_SERVER['SERVER_PROTOCOL'])? $_SERVER['SERVER_PROTOCOL'] : 'HTTP/1.x';
if(strcmp(PHP_VERSION,'PHP 4.3.0')>=0)
header($http1x.' 304 Not Modified',true,304);
else
header($http1x.' 304 Not Modified');
header('Status: 304 Not Modified');
header('ETag: '.$etag);
exit(0);
}
return $notmodified;
}
function setModified() {
$this->_content_modified = time();
}
 
 

\includes\domit\php_http_status_codes.php

Код
class php_http_status_codes {
var $codes;
function php_http_status_codes() {
$this->codes = array(200 => 'OK',201 => 'CREATED',202 => 'Accepted',203 =>
'Partial Information',204 => 'No Response',301 => 'Moved',302 => 'Found',303 =>
'Method',304 => 'Not Modified',400 => 'Bad Request',401 => 'Unauthorized',402 =>
'PaymentRequired',403 => 'Forbidden',404 => 'Not found',500 => 'Internal Error',
501 => 'Not implemented',502 => 'Service temporarily overloaded',503 =>
'Gateway timeout');
}
 
function getCodes() {
return $this->codes;
}

вроде все красиво, должно работать. Установлен easy SEF еще, начал на него думать, но не очень понимаю как он вообще работает.
Глянул еще в XML карту sitemap, даты там левые, на большей части страниц стоит дата создания самой карты, т.е. текущая.

Такое чувство, что чего-то с кешем.... будем искать
Записан
Страниц: [1]   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

Рейтинг@Mail.ru Rambler Top100 Powered by SMF 1.1.16 | SMF © 2006, Simple Machines

Joomlaforum.ru is not affiliated with or endorsed by the Joomla! Project or Open Source Matters.
The Joomla! name and logo is used under a limited license granted by Open Source Matters
the trademark holder in the United States and other countries.

LiveInternet