geek.conf.2

あるエンジニアの備忘録

Entity Tag

Entity TagとはETagという、http 応答ヘッダの種類である。
apacheの場合、その値は

1.そのサーバにインストールされたapacheのinode番号
2.サイズ
3.コンテンツの最終修正時刻

の順となっている。

これ何に使うの?

ユーザがそのWebサーバにアクセスした際にブラウザでETagを見て
最終修正時刻を確認します。

apacheはユーザがブラウザで確認した最終修正時刻を確認し、
変更されている場合にはレスポンスヘッダとして200 OKとコンテンツを
返却し変更がなければ304 Not Modifiedを返却し、ブラウザはキャッシュ
ファイルを表示します。

つまり、ETagはネットワークトラフィックを考慮してキャッシュ管理を行うための
http 応答ヘッダであると言えます。

ここまではすげーいいヤツに思えますが、複数あるサーバをロードバランスする
場合にはやっかいなヤツになります。

なぜならロードバランスした際に以前と異なるサーバにアクセスした場合に
inode番号はもちろん異なるため、キャッシュ管理ができなくなってしまうから
です。

これを回避するにはFileETagディレクティブをhttpd.confに記述します。

FileETag MTime Size

上記の記述でETagの値を最終修正時刻とサイズのみとすると定義できます。
ETagをhttp 応答ヘッダに付与したくなければ

FileETag None

とします。

しかし、私が管理している環境ではうまくいかなかったのです。

その環境はapachetomcatを連携させているWebサーバなのですが、httpd.confに

FileETag None

と記述してもETagが付与されてしまいました。

よく見るとapacheのETagのような値ではなく以下のような値でした。

Etag: W/"4133-1216800200000"

そしてこのETagは$Tomcat_HOME$/webapps/コンテンツ/以下のgifやjsファイルに
付与されていた。

調べるとこれはWと前方についていてweak ETagと言うものらしい。。。
うーん、なにやら弱い比較で扱われるものだそうだが日本語での解説
が発見できなかったためよく分かりません。

とにかくこれ消したいのでhttpd.confに以下のように記述して無理やり消しました。

Header unset Etag

いや、マジでWeak ETagについて詳しい方、情報ください。