If-None-Matchに「*」をつけたときの挙動
http://svn.apache.org/repos/asf/httpd/httpd/trunk/modules/http/http_protocol.c の 334行目付近参照。
if_nonematch = apr_table_get(r->headers_in, "If-None-Match"); if (if_nonematch != NULL) { if (r->method_number == M_GET) { if (if_nonematch[0] == '*') { not_modified = 1; } else if (etag != NULL) { if (apr_table_get(r->headers_in, "Range")) { not_modified = etag[0] != 'W' && ap_find_list_item(r->pool, if_nonematch, etag); } else { not_modified = ap_find_list_item(r->pool, if_nonematch, etag); } } }
- If-None-Matchがセットされていて
- GETメソッドで
- if_nonematch[0]が「*」だったら
なんとNot Modifiedと言う判別になるみたい。(via ETag とキャッシュの関係(リベンジ→未解決), ETag とステータスコード 200 or 304 - まちゅダイアリー(2007-01-07))
試してみましょう。
$ lwp-request -m GET -H 'If-None-Match: *' -U -s -e -d http://localhost/test2/logo.gif GET http://localhost/test2/logo.gif If-None-Match: * User-Agent: lwp-request/2.07 304 Not Modified Connection: close Date: Mon, 13 Aug 2007 10:15:56 GMT ETag: "2232" Server: Apache/2.2.4 (Unix) Client-Date: Mon, 13 Aug 2007 10:15:56 GMT Client-Peer: 127.0.0.1:80 Client-Response-Num: 1
ほんとだ。
蛇足だけどHEADリクエストにしても同じ結果になります。