(コラム)304NotModifiedがよく返ってくる件@HTTP技術
304NotModifiedってリソースの変更がないのでクライアントからキャッシュを表示してください。という意味なのですが、ふと疑問に思ったことがあります
「リソースの変更がない事をどうやってhttpdが判別しているのか」
「キャッシュの内容を変更しなくてよいことをどうやって伝えているのか」
調べていくうちにわかったこと
- (レスポンス1回目)Apacheのmod_cacheでLast-Modifiedヘッダに出力
- If-Modified-Sinceヘッダをつけてリクエスト
- ↑のヘッダの時間によってApache側で制御して 304(NotModified) or 200(OK)を返す
って流れなんですね!
参考サイト
- 304 Not Modifiedをただただ確認してみる
http://d.bulkitem.com/20080411.html
- モジュール版PHPで「If-Modified-Since」に対応する
http://www.arielworks.net/articles/2004/0125a
Etagについて調べました
-レスポンスをEtagにを付けて返す
-次回リクエストのIf-None-Matchヘッダに↑で取得したEtagの値を付けてリクエストをする
-サーバー側でIf-None-Matchを元に更新の有無を決定する
参考サイト
http://httpd.apache.org/docs/2.2/ja/mod/core.html#fileetag
http://www.inter-office.co.jp/contents/193/
http://blog.drry.jp/2005/01/10/2117