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, должен…
Вашими бы устами… :)