Archive for the ‘PHP’ Category

If-Modified-Since と If-None-Match と Cache Lite

Thursday, April 3rd, 2008

今週のネタは MUXTAPE なのかなぁ、と思っておりまして、

やっぱり折角なので知識の確認と勉強のために、プロキシーにキャッシュを入れておこうと思い立ち、ところが、開発ツールのバグ?に合って、数日かかってしまいました。
(あっ、そうそう、FireFox 3.0b5 MAC OSX で insertRule がエラーになるんですけど、皆さんはどうですか?ちなみに問題のツールとは Coda。)

まだ完全なライブラリの形にはなってませんが、今までのところをメモっておきます。(まあ多分これも既にどこかにあるんでしょうね、きっと。まあ勉強ということで。)

HTTP のプロトコルをご存知の方は、「知ってるよ」って感じでしょうが、

ブラウザが以前に訪問したコンテンツを再度表示する時の動作ですが、
リクエストヘッダに If-Modified-Since(前回取得した最終更新日時以降に更新されていたら)や If-None-Match(コンテンツ更新毎の固有の ID が違っていたら)をつけてリクエストすると、
サーバー側でそのコンテンツが更新されているかどうか調べて、更新されていた時だけ、新しいコンテンツが返信されて来るようになる、ってものです。

これには、ブラウザ側とサーバー側の両方が対応していなければなりません。
特に PHP 等で動的にコンテンツを生成している場合は、プログラム側できちんと制御してあげないと、コンテンツの内容は同じなのに、常に新しいデータを返信してしまい、トラフィックが増えてしまいます。

この手法は特に RSS リーダー(ブラウザ)と RSS(コンテンツ)において良く議論されていますね。

RSS リーダーは、普通の人間が介するブラウザと違って、一定間隔で RSS の更新を調べてデータを取ってこなくてはなりませんから、それを処理するサーバーのトラフィックも大変です。そんなに頻繁に更新されるわけでもない RSS に常にリクエスト出してる訳ですから、余計なトラフィックと言う訳です。

また、どちらか一方だけ対応しても意味がないので、どのリーダーやプログラムがお利口さんで行儀が良いのか議論になるわけです。

(more…)