256bitの殺人メニュー

インフラエンジニアだったソリューションアーキテクトなくわののブログ。こちらのBlogは個人の意見となっていて会社とは全く関係ありません。お約束です。[twitter:@kuwa_tw]めんどくさがりが重い腰を上げて何かをアウトプットすることにどれほどの意味があるのかを試してみたいブログでもある。

FileETag

不可解と思える(というか分かり辛い)動きをするのでメモ。

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かな。