ちょっと前の話ですが、RSSリーダーがインターネット渋滞の元凶になるという記事がHotWiredに掲載されていました。
HeimdallrというRSSリーダーを開発している身にとって、他人事ではないので、ちょっと考えてみることにしました。
今のHeimdallrは、上記記事にあるような
RSSリーダーは通常、前回のアクセス時以降、RSSファイルが更新されたかどうかをチェックする仕組みになっている。もし更新がなかった場合、ウェブサイトは「no」(なし)というごく小さなメッセージをRSSリーダーに返す。
というようにはまったくなっていません。
記事の更新を行う際、毎回コンテンツを全部ダウンロードしています。
いやぁHeimdallrは素行の悪いRSSリーダーですね。
RSS Feedって画像やらなんやらの重たいコンテンツが含まれていないので
取得回数が多くても平気だと思っていました。
しかし、現実に問題が発生しているサイトがある以上、無視するわけにもいかないでしょう。
といっても、実際の所、Heimdallrは、更新間隔は30分以下には設定できないようにしてありますし、
デフォルトの更新間隔は60分となっていますし、
なによりマイナーなので使用者が少ないため、
問題を引き起こす可能性は少ないでしょう。
しかし、Heimdallrがもし爆発的に普及すると(ありえなさそうですが)、
Heimdallrのせいでサイトが落ちたとか言われかねません。
そこで、上記の仕様のとおりに実装し、サーバーに大きなコンテンツを要求する回数を減らすようにしようと思いました。
ところが、技術的にどう実装すれば良いのか良く分かりません。特に分からないのがこれ。
ウェブサイトは「no」(なし)というごく小さなメッセージをRSSリーダーに返す。
これってどうやればいいんだろう・・・。誰か何かご存知でしたら教えて下さい。
良く分からないので、ちょっと考えた挙句、以下のような仕様にすることにしました。
実は、現時点でほぼ実装が終わってテスト中です。
サーバーへの負荷がどうなったのかは良く分かりませんが、更新するのに必要な時間がだいぶ短くなりました。感覚的には1/3以下ですね。
次のバージョンであるHeimdallr 1.04alpha3ではこの機能をお披露目できると思います。
If-Modified-Since を使えばいいようですね。これならHEADとGETの二回に分けなくても良いですし、転送量が少なくて済みそうです。