If-Modified-SinceやらLast-Modifiedやらなんやらの絡みで、ETagなるものを調べていたわけですが、とりあえずあれば使うけどなくても別に・・・みたいなモノっぽい感じ。If-Modified-Sinceは、とりあえずLast-Modifiedを常に吐いて、受信ヘッダをチェックし適切に304を返してやるだけでOKな感じ。
ていうかETagはどういう風に生成するものか調べきれなかった。リクエストされたURLや更新時刻、inodeなどを元に生成するらしいけど。そこまでしか。
ブラウザは受け取ったETagの値を、次回リクエスト時にIf-None-Matchの値としてそのまんま送ってくるだけな感じなので、適当にMD5やらなにやらでハッシュを生成してやるだけ?
まぁ、Last-Modified吐いて適当にIf-Modified-Since調べるだけで十分っぽい感じなので、もうblosxomのプラグインには実装しないと決めたんですが。
Movable Type 3.1からサポートされた動的生成はどんな感じなんだろう? 調べてみて目から鱗だったらパクろう参考にしようかな。
しーぱん派なにぽたんさんからETagの生成方法(Apacheにおける実装に過ぎないのかもしれない)をコメントで教えてもらったので追記しておく。
my $etag = sprintf(qq{ETag: "%x-%x-%x"\n}, (stat($file))[1, 7, 9]);
$file
に対するstat()
で返されるリストの、inode/size/mtimeをそれぞれ符号なし16進数でフォーマットしたものを"-"で連結ということみたいですね。