RSS. 200 OK

23rd August 2004 - 12:03

Обычно я такие фиды складываю в отдельный каталог и проверяю один раз в сутки или даже реже. Нервы берегу.

http://example.com/export/rss/

GET /export/rss/ HTTP/1.1

HTTP/1.x 200 OK
Date: Mon, 23 Aug 2004 06:37:07 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Pragma: no-cache
Last-Modified: Fri, 13 Aug 2004 11:44:40 +0400

http://example.com/export/rss/

GET /export/rss/ HTTP/1.1

HTTP/1.x 200 OK
Date: Mon, 23 Aug 2004 06:37:18 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Pragma: no-cache
Last-Modified: Fri, 13 Aug 2004 11:44:40 +0400

Categories: RSS, Web-билдинг | comments: (3)

Комментарии

1. Slach 24th August 2004 - 12:25

потому что там в заголовках антикеш ??

Mash:

Да. Запросив этот RSS через несколько секунд после предыдущего запроса, я снова получаю его полностью, хотя фактически он не менялся.

Я не маньяк, ежеминутные запросы не делаю, но когда два-три раза в день получишь с каждого такого фида килобайт по тридцать мусора… Трудно назвать это существенными затратами, зато затратами лишними — легко.

2. Vanav 25th August 2004 - 18:07

Когда получаете RSS, запомните его Last-Modified и ETag. В следующий раз, при проверке передайте запомненное в If-Modified-Since и If-None-Match соответственно (для совместимости с HTTP 1.0 и 1.1).

Если RSS не изменился, то ответом будет «304» (Not modified) без данных. Поскольку у вас Last-Modified в норме, то должно работать.

Mash:

>> Когда получаете RSS, запомните его Last-Modified и ETag…

ETag там нет, единственное, что соответствует действительности — Last-Modified. Дело не в этом.

Во-первых, после того, как браузеру/читалке прокричали в ухо «Не вздумай кэшировать, проверяй всегда!», ни о каких If-Modified-Since при повторном запросе он и не думает. Есть FireFox + Live HTTP headers или подобные инструменты? Сделайте два запроса и убедитесь сами.

Во-вторых, даже если я напишу свою читалку и начну отдавать эти заголовки, нет никакой гарантии, что они заинтересуют тот скрипт, который отвечает за выдачу RSS. Мне так же будет приходить «200 OK»

3. Vanav 26th August 2004 - 00:23

Нет ETag — значит, HTTP 1.0. Работает Last-Modified / If-Modified-Since.

Конечно, согласен, что запрещать кеширование страниц — это свинство, но часто неумышленное. Я на прокси переписываю headers, и браузер кеширует, ни о чем не подозревая.

А качалка RSS должна сама сделать все необходимое — на то она и агрегатор.

> Мне так же будет приходить «200 OK»

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

А скрипт, выдающий RSS, должен либо проверять/выставлять заголовки самостоятельно (что довольно сложно), либо доверить эту работу серверу: писать RSS в файл, и только тогда, когда его нужно обновить.

Mash:

>> А качалка RSS должна сама сделать все необходимое — на то она и агрегатор.

Если клиенту ясно дали понять, что кэшировать он не должен, а он начинает заниматься самодеятельностью…

Своя доля правды здесь есть, но это уже из серии «парсим кривой XML».

>> А скрипт, выдающий RSS, должен…

Вашими бы устами… :)

Комментарии временно отключены.