Скрипт обработки If-modified-since вызывает выпадение страниц из Яндекса

epifan
На сайте с 01.02.2009
Offline
27
969

Для правильной обработки If-modified-since попробовал использовать вот такой код.

Насколько я смог отследить при ответе 200 все проходит нормально, а когда Яндекс пришел на страницу второй раз (304) страница выпала из индекса - "передано неверное количество данных".

Т.е. после exit страница все равно была отдана или в чем проблема?

Подскажите как исправить ошибку.

Заранее спасибо.


<?php
header('Cache-Control: no-cache, no-store, must-revalidate');
header('Pragma: no-cache');
function date2unixstamp($s)
{
$months = array ('Jan' => 1, 'Feb' => 2, 'Mar' =>3,'Apr' => 4, 'May' => 5, 'Jun' =>6,'Jul' => 7, 'Aug' => 8, 'Sep' =>9,'Oct' => 10, 'Nov' => 11, 'Dec' =>12);
$a = explode(' ', $s);
$b = explode(':', $a[4]);
return gmmktime($b[0], $b[1], $b[2], $months[$a[2]], $a[1], $a[3]);
}
$file_name='index.php';
$mt=filemtime($file_name);
$mt_str = gmdate('D, d M Y H:i:s', $mt).' GMT';
if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE']))
{
$cache_mt = $_SERVER['HTTP_IF_MODIFIED_SINCE'];
if (date2unixstamp($cache_mt) >= $mt)
{
header('Last-Modified: '.$mt_str);
header('HTTP/1.0 304 Not Modified');
exit;
}
}
header('Last-Modified: '.$mt_str);
header('Content-Encoding: gzip');
header('Content-Type: text/html; charset=windows-1251');
?>
<html>
<head>
.....
</head>
<body>
</body>
</html>
RAS
На сайте с 27.11.2005
Offline
126
RAS
#1

gzip кто сжимает у вас на выход ?

Администрируем сервера, впс, вдс. Ускоряем загрузку сайтов - DLE, Word Press, Joomla, Modx... Настраиваем безопасность. Ручная чистка rootkit/malware/вирусов. (/ru/forum/867860) Разработка - shell/bash/sh/python/perl.
epifan
На сайте с 01.02.2009
Offline
27
#2
RAS:
gzip кто сжимает у вас на выход ?

прописанный в .htaccess

php_flag zlib.output_compression On
N
На сайте с 06.05.2007
Offline
419
#3

а движок тоже умеет сжимать?

так бывает когда сжатие включено и в php и в движке.

Кнопка вызова админа ()
RAS
На сайте с 27.11.2005
Offline
126
RAS
#4

отключите сжатие и попробуйте, возможно, что некорректная длина выдается скриптом. Проведите тест без сжатия и просмотрите заголовки таким же запросом, как и бот это делает, хоть через wget.

farlow
На сайте с 07.05.2008
Offline
102
#5

вы уверены что это

header('Last-Modified: '.$mt_str);

вам нужно, если вы все же передаете

header('HTTP/1.0 304 Not Modified');

Ищу дизайнера, вебмастера
euhenio
На сайте с 21.09.2001
Offline
357
#6
epifan:
а когда Яндекс пришел на страницу второй раз (304) страница выпала из индекса - "передано неверное количество данных".

-я чего-то не догоняю, а ведь вас в скрипте выдается код страницы в любом случае? Или нет?

а в случае 304 код страницы отдавать не нужно, только заголовок.

Вообще, выпадение из-за 304 бывало и просто так, без причины. Я еще давно отказался от поддержки 304.

с ув., Евгений Трофименко seo блог Trofimenko.ru ( http://trofimenko.ru/ ) но ыыы мало обновляется... Tools.Promosite.ru - анализатор апдейтов Яндекса (пожертвуйте лимиты на Яндекс.XML! ( https://searchengines.guru/ru/forum/801888/page7#comment_11942489 )) Konvr.ru - увеличение конверсии сайта на 81% за 4 недели ( http://konvr.ru/ )
farlow
На сайте с 07.05.2008
Offline
102
#7
euhenio:
-я чего-то не догоняю, а ведь вас в скрипте выдается код страницы в любом случае? Или нет?
а в случае 304 код страницы отдавать не нужно, только заголовок.

Вообще, выпадение из-за 304 бывало и просто так, без причины. Я еще давно отказался от поддержки 304.

почему у него код в любом случае? смотри внимательней, после 304 он завершает работу, и это правильно, но вот зачем вместе с 304 отдает еще и Last-Modified, не совсем понятно

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