Обработал If-Modified-Since - не попадаю в апдейты

123
И
На сайте с 11.10.2004
Offline
32
#11
Алёша:
заголовки у Вас обрабатываются не правильно точнее вовсе не обрабатываются

Алеша, я не понял. Проверил указанным Вами сервисом, отдача 304 на "now" и 200 на "-1 month" мне кажется правильной.

ИМХО, принципиальной разницы в кодах обработки нет, за исключением того, что exit я потерял. Тут бесспорный сеньк.

Всё же, если в течение недели ничего не изменится, попробую убрать обработку, пусть опять на всё 200 валит.

Дряхлый кандидат (наук)
[Удален]
#12
Иваныч:
отдача 304 на "now" и 200 на "-1 month" мне кажется правильной

А... вот как оно работает. Просто не догадался посмотреть отклик на now

Но это полюбому неверно. Так не бывает.

Нужно определить дату Х до которой 304 а после 200.

Наоборот быть не может, а у Вас имеено так.

И
На сайте с 11.10.2004
Offline
32
#13

Нет, Алёша, только так и может ЧУЖЕЙ сервис спровоцировать 304.

[Удален]
#14

Иваныч, если now -> 304, то все запросы на более раннюю дату тем более должны быть 304, а ни как не 200.

И
На сайте с 11.10.2004
Offline
32
#15

Дык, меняется-то не дата документа (ее чужой сервис поменять не может), а дата выдаваемого ifmod-a

[Удален]
#16

Иваныч, Вы не читаете то, что я пишу...

Ваш скрипт обрабатывает даты не вено.

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

И
На сайте с 11.10.2004
Offline
32
#17

Попробуем еще раз.

now и -1 month - это дата IfMod-a.

lastmod - между ними.

Сервис ввыдает ифмод месячной давности, и получает 200, ведь ластмод более поздний.

[Удален]
#18
Иваныч:
Попробуем еще раз.
now и -1 month - это дата IfMod-a.
lastmod - между ними.

Вот в этом случае при правильной работе Вашего скрипта сервис должен отдавать 304 для -1 month и 200 для now, а у Вас наоборот.

F
На сайте с 13.07.2004
Offline
22
#19

неплохо бы еще ETag отдавать для полного соблюдения протокола if-modified

вот мой код для примера

ob_start(); 

// формирование страницы
......
// генерация хедеров
$content=ob_get_contents();
ob_end_clean();
$headers=getallheaders();
$lastmodified=gmdate('D, d M Y H:i:s',$lastedit).' GMT';
$ETag=md5($content);
header('Content-Type: text/html; charset=windows-1251');
if ($headers['If-Modified-Since'] == $lastmodified && $headers['If-None-Match']==$ETag){
header('HTTP/1.0 304 Not Modified');
header("ETag: \"$ETag\"");
}
else{
header('HTTP/1.0 200 OK');
header("Last-Modified: $lastmodified");
header("ETag: \"$ETag\"");
echo $content;
}

этот код проверен на многих сайтах

И
На сайте с 11.10.2004
Offline
32
#20

Fomich, В общем случае Вы, наверняка, правы, но у меня случай частный :) Я динамически не генерирую "прочих" файлов, посему ETag для них благополучно выдает апач.

Вот отклики сервера при обращении к имеющемуся на сайте файлу .doc:

c ifmod now

HTTP/1.1 304 Not Modified

Date: Mon, 28 Aug 2006 19:37:28 GMT

Server: Apache/1.3.33 (Unix)

Connection: close

ETag: "14f84e-f400-447c0e1d"

Expires: Mon, 28 Aug 2006 19:37:28 GMT

Cache-Control: max-age=0

c If-Modified-Since - 1 year (выделено жирным для Алёши)

HTTP/1.1 200 OK

Date: Mon, 28 Aug 2006 19:38:43 GMT

Server: Apache/1.3.33 (Unix)

Cache-Control: max-age=0

Expires: Mon, 28 Aug 2006 19:38:43 GMT

Last-Modified: Tue, 30 May 2006 09:19:25 GMT

ETag: "14f84e-f400-447c0e1d"

Accept-Ranges: bytes

Content-Length: 62464

Connection: close

Content-Type: application/msword

В любом случае - всем спасибо.

123

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