RamazeでETagを出力するパッチが投稿されました

gabriele renzi さんが Ramaze で ETag を出力するナイスなパッチを投稿して下さっていました。

http://rubyforge.org/pipermail/ramaze-general/2008-January/000125.html

しかもLast-Modified, If-Modfied-Since用のテストも追加して下さってて私の手抜きがバレバレという感じです。いや、テスト書かなきゃいけないんだろうなぁ、とは思ったんですが、テスト書くの下手糞なのでついつい忘れたことにしておりました。ごめんなさい。

ところで ETag ってイマイチ良く分からないんですよね。Last-Modifiedと同様の機能を果たすためのもので、内容が変わったかどうかを(一般的には?)何かしらに対するMD5値で判断するものなんですよね?

I'm building the hash as MD5(filename+mtime) instead of
reading the whole file to hash it, it may have sense to add file size
or inode number.

http://rubyforge.org/pipermail/ramaze-general/2008-January/000125.html

とあるので、ファイル名+最終更新時間にMD5をかけてつくる、ということらしいのですが、inodeを見てMD5決めると複数サーバで運用した時に問題あるよ、という話を聞いたのでinodeを含めないのは良いとして(あれ、じゃあmtimeだって問題あるんじゃないのかな?)、ファイルサイズとかはどうなの。結局ファイルの同一性と新旧さえ分かれば良いのでしょうからMD5じゃなくっても良いような気がしますが、一般的にはどうやってETagの値を求めるべきなのでしょうか。うーん。