304 Not modified. Правильно отдаю?

Xover
На сайте с 22.05.2006
Offline
101
1608

Для ускорения индексации сайта я приделал код на PHP к движку


if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE']))
{
header('HTTP/1.0 304 Not Modified');
exit;
}
else
{
$last_modified=gmdate('D, d M Y H:i:s', time()) . ' GMT';
header('Last-Modified: ' . $last_modified);
}

Для страниц которые не меняются впринципе.

Так вот указывать протокол HTTP/1.0 или HTTP/1.1 ?

Есть ли какие-нибудь рекомендации или поправки? Прочитал пару статей и сделал вот так.

Покупаю внутренние PR4 на sape.ru (http://www.sape.ru/r.f3cfb23480.php)
pro-maker
На сайте с 08.12.2003
Offline
281
#1
Xover:
Для страниц которые не меняются впринципе.

Такие страницы можно в html положить на сервер.

Xover:
Есть ли какие-нибудь рекомендации или поправки? Прочитал пару статей и сделал вот так.

Xover, еще поразбирайтесь. По Вашему коду получается, что клиент, который один раз запросил документ, будет всегда получать 304-ый отклик.

B
На сайте с 06.04.2006
Offline
24
#2

У меня подобный код работает. Яндекс и гугл едят нормально.

Функцию if_modified_since вставляете перед обработкой запроса, даёте ей время последнего изменения страницы (unix_timestamp из БД, например) и всё.

Она отдаст 304 если изменений не было и завершит работу скрипта, или просто вернёт управление.

function if_modified_since($unix_timestamp)

{
$last_modified = date("D, d M Y H:i:s T", time());

// Дделаем обработку Conditional GET'а:
if (!isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])) {
// Conditional Get не задан - просто отдаем файл.
header("Last-Modified: $last_modified"); // последнее изменение - сейчас
} elseif (isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])) {
// Conditional GET задан, проверка только по If-Modified-Since:
$unix_ims = strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']); // значение If-Modified-Since в UNIX формате

if ($unix_ims > time() || !is_int($unix_ims)) {
// Ошибка Conditional GET - просто отдаем файл.
header("Last-Modified: $last_modified"); // последнее изменение - сейчас
} else {
// Conditional GET корректен.
if ($unix_ims >= $unix_timestamp) {
// Копия файла в кеше клиента не устарела - сообщаем ему об этом...
header("HTTP/1.1 304 Not Modified"); // не модифицировано
// ...и заканчиваем выполнение скрипта, не отсылая сам файл.
while(ob_get_level()) ob_end_clean();
exit;
} else {
// Похоже, что копия клиента устарела.
header("Last-Modified: $last_modified"); // последнее изменение - сейчас
} // if unix_ims > timestamp
} // if unix_ims > time()

} // if isset server-modified-since
return;
} // if_modified_since
Мониторинг сайтов (http://hostpulse.ru/), серверов, проверка содержимого страниц.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий