If-Modified-Sinceに対応
気付いてなかった訳ではないんです。当サイトの個別アーカイブみたくモジュール版PHPで動作するページが、最終更新日時を返さない→If-Modified-Sinceに対して無条件に200を返しちゃう事に。
でもまぁ、大したサイズでもファイル数でもないし、自分的にはトラフィックが多少増えてもあんまり気にしないかな、とか思って。アクセス数自体も知れてるし(^^;;
でも、仕事で作ってる方のPHPサイトでIf-Modified-Sinceに対応する必要が出てきちゃいましたので、ついでにこちらのサイトでも対応してみました次第。
If-Modified-Since対応ってのは、
・リクエスト中に「If-Modified-Sinceなんとか」という文字列があれば
・引数の日時を自分の保つタイムスタンプ値(最終更新)と比較して
・それ以降更新されてなければ「304 Not Modified」を返す
・ブラウザは持ってるキャッシュを表示
という仕掛け。
静的なファイルならこのへんの処理をApacheが自動的にやってくれるんですが、PHPなサイトはこれにも無条件に200を返しちゃう
プログラム的に対応する場合は、上記の動作を自前で行なえば良い訳なので、今回はavoidnoteさんのPHP で If-Modified-Since に対応してみるからdoConditionalGet()関数を使わせて頂きました。
このサイトはMovable Typeなので、
・(何度も同じこと書くのがめんどくさいので:^^;)インクルードするPHPファイルを作成し、これで関数を定義
・関数定義部をインクルードして実行するテンプレートモジュールを作成
・If-Modified-Sinceに対応させたいファイルの先頭にこのテンプレートモジュールを挿入
↑こんな感じに。実際の組み込み状況はテンプレート公開で見てもらえば早いかと。
プログラム的に対応してる→返す最終更新日時は任意に設定出来ちゃう→当該エントリーの「最終更新日」を返しても良かったんですが、リビルド時にインクルードファイル他が更新されてる可能性もあるんで、素直に「ファイル自体の最終更新日時」を返してます。
include 'php_inc.php';
doConditionalGet(getlastmod());
?>
注意点>PHP以外のファイルには書かない(ぉ
なんか.shtmlなファイルにも思いっきりインクルードしとりました。アホや…(^^;;>俺