不可解と思える(というか分かり辛い)動きをするのでメモ。
inodeを使用したEtagを出さないようにしようと、最初
FileETag -INode
としたのですが、全く効かず。
何でじゃーー、と思ってちょっと調べた。
[include/http_core.h] 設定しなければ(=UNSET)0。 INode, MTime, SIZEが設定されてれば1110。 Noneは、1か。 #define ETAG_UNSET 0 /* 未設定時 0 */ #define ETAG_NONE (1 << 0) /* NONE設定時 1 */ #define ETAG_MTIME (1 << 1) /* MTime設定時 10 */ #define ETAG_INODE (1 << 2) /* INode設定時 100 */ #define ETAG_SIZE (1 << 3) /* Size設定時 1000 */ #define ETAG_BACKWARD (ETAG_MTIME | ETAG_INODE | ETAG_SIZE) /* 未設定の時の初期値 1110 */ #define ETAG_ALL (ETAG_MTIME | ETAG_INODE | ETAG_SIZE) /* All設定時 1110 */
[server/core.c] (snip) if (first) { /* 最初にすべて0で初期化 */ cfg->etag_bits = ETAG_UNSET; cfg->etag_add = ETAG_UNSET; cfg->etag_remove = ETAG_UNSET; first = 0; } } (snip) else if (action == '-') { cfg->etag_remove |= bit; /* 0000 | 0100 = 0100 */ cfg->etag_add &= (~ bit); /* 0000 & 1011 = 0000 */ } (snip)
結果設定されず。
[modules/http/http_etag.c] if (etag_bits == ETAG_UNSET) { etag_bits = ETAG_BACKWARD; }
ただし、以上の様にUNSETだったらBACKWARDの値が入るようになっているので全部のETAGが出ると言う事の様で。
FileETag -HOGEと言う書き方は現在設定している値がなければ反映されないみたい。
デフォルト全部有効なのに、-HOGEってしても関係ないってのがなんとも気持ち悪いなぁ。
まあ言ってもしょうがないので、InodeをEtagに出したくなかったら、
FileETag MTime Size
こうしろと言う事でFAかな。