| 日 | 月 | 火 | 水 | 木 | 金 | 土 |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| 16 | 17 | 18 | 19 | 20 | 21 | 22 |
| 23 | 24 | 25 | 26 | 27 | 28 | 29 |
| 30 |
■ If-Modified-Sinceに対応 |
気付いてなかった訳ではないんです。当サイトの個別アーカイブみたくモジュール版PHPで動作するページが、最終更新日時を返さない→If-Modified-Sinceに対して無条件に200を返しちゃう事に。
でもまぁ、大したサイズでもファイル数でもないし、自分的にはトラフィックが多少増えてもあんまり気にしないかな、とか思って。アクセス数自体も知れてるし(^^;;
でも、仕事で作ってる方のPHPサイトでIf-Modified-Sinceに対応する必要が出てきちゃいましたので、ついでにこちらのサイトでも対応してみました次第。
If-Modified-Since対応ってのは、
・リクエスト中に「If-Modified-Sinceなんとか」という文字列があれば
・引数の日時を自分の保つタイムスタンプ値(最終更新)と比較して
・それ以降更新されてなければ「304 Not Modified」を返す
・ブラウザは持ってるキャッシュを表示
という仕掛け。
静的なファイルならこのへんの処理をApacheが自動的にやってくれるんですが、PHPなサイトはこれにも無条件に200を返しちゃう *1 →ブラウザがキャッシュを持ってても無条件にトラフィックが発生→みんな不幸に(^_^;)
プログラム的に対応する場合は、上記の動作を自前で行なえば良い訳なので、今回はavoidnoteさんのPHP で If-Modified-Since に対応してみるからdoConditionalGet()関数を使わせて頂きました。
このサイトはMovable Typeなので、
・(何度も同じこと書くのがめんどくさいので:^^;)インクルードするPHPファイルを作成し、これで関数を定義
・関数定義部をインクルードして実行するテンプレートモジュールを作成
・If-Modified-Sinceに対応させたいファイルの先頭にこのテンプレートモジュールを挿入
↑こんな感じに。実際の組み込み状況はテンプレート公開で見てもらえば早いかと。
プログラム的に対応してる→返す最終更新日時は任意に設定出来ちゃう→当該エントリーの「最終更新日」を返しても良かったんですが、リビルド時にインクルードファイル他が更新されてる可能性もあるんで、素直に「ファイル自体の最終更新日時」を返してます。
注意点>PHP以外のファイルには書かない(ぉ
なんか.shtmlなファイルにも思いっきりインクルードしとりました。アホや…(^^;;>俺
| 関連IT用語 by e-Words |