На многих регулярно обновляющихся сайтах встроен RSS. Это удобно для пользователя и привлекательно для вебмастера: люди будут постоянно в курсе новинок, формируя таким образом ядро постоянных посетителей. Однако, зачастую новинки на сайте появляются в строго определенные часы (или дни), например, рабочие. Как объяснить RSS-клиенту посетителя, что в определенное время обновлений не будет, чтобы он не посылал лишние HTTP-запросы?
Сразу оговорюсь, это статья для тех, кто генерирует RSS на своем сайте, а не тех, кто читает. Частота опроса сервера на клиенте легко настраивается в виде интервала: раз в минуту, в час и т.д.
Казалось бы, в стандарте RSS должен быть какой-то параметр, типа frequency, который объявляет частоту обновления канала. Но не тут-то было, всё оказывается организовано по-другому, хоть и достаточно просто. В RSS-канал можно добавить тег skipHours, внутри которого перечислить, в какие часы суток в RSS-канале не бывает обновлений. В эти часы клиент, если он правильный, не будет слать запросы к серверу. Пример:
<?xml version="1.0" encoding="UTF-8" ?> <rss version="2.0"> <channel> <title>Заголовок тестового потока</title> <link>http://www.test.com</link> <description>Описание тестового потока</description> <skipHours> <hour>0</hour> <hour>1</hour> <hour>2</hour> <hour>3</hour> <hour>4</hour> <hour>5</hour> <hour>6</hour> <hour>7</hour> <hour>17</hour> <hour>18</hour> <hour>19</hour> <hour>20</hour> <hour>21</hour> <hour>22</hour> <hour>23</hour> </skipHours> <item> <title>Заголовок записи</title> <link>http://www.test.com/rss</link> <description>Описание первой записи RSS</description> </item> </channel> </rss>
Время между 12-ю часами ночи и часом ночи обозначается нулем. В приведенном выше примере часы с 12 ночи до 8 утра и с 5 вечера до 12 ночи объявлены как часы без обновлений, в которые RSS-клиентам нет смысла «затягивать» изменения. Выглядит, мягко говоря, громоздко, но другого в стандарте не дано.
Помимо часов, можно клиентам указать и дни без обновлений с помощью тега skipDays, например:
<skipDays> <day>Saturday</day> <day>Sunday</day> </skipDays>
То есть, в субботу и воскресенье мы обычно не работаем, а значит, и RSS-канал можно не опрашивать.
Зачем все это нужно? Чтобы сэкономить ресурсы сервера, ведь RSS-клиентов у нашего гипотетического сайта может быть очень много. С другой стороны, клиент не будет лишний раз «напрягаться» сам, чтобы отправить запрос и получить в ответ, что ничего не обновилось.