/
447.txt
79 lines (60 loc) · 4.01 KB
/
447.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#?SuikaWiki/0.9 page-icon="HTTP"
- [1] 【[[HTTP]]】 [[entity-tag]]。
- [2] [[キャッシュ]]や[[内容折衝]]の関係で、[[実体]]と実体を比較するに当たって識別子的に用いられる適当な文字列です。 (構文は [[HTTP]] の仕様書で決められていますが、その構文に従った範囲で自由な方法で札を生成できます。)
- [3] よくデータの同一性検査に [[MD5]] 値を使ったりしますが、それを一般的にしたようなものであると理解すれば良いでしょう。
- [4] [[HTTP/1.1]] では、 [[ETag]] 欄や [[If-None-Match]] 欄などの値として使用されます。
- [5] [[Apache]] では実体札の算出に、当該ファイルの [[inode]] 番号, 大きさ, [[mtime]] を使っています。 [SAMP(HTTP)[Etag: "19ebd-86f-a5f83ea5"]] のような値が得られます。この計算方法は 1.[VAR[x]] と 2.[VAR[x]] で微妙に違うようです。
- [6] >>5 参考 [Apache-Users 2282], [Apache-Users 2287]
- [7] [[構造化実体札]]については [[RFC2295]] にも言及があります。
[8]
> ETagの文字列はmod_perlのset_etagメソッド内部で呼び出される
Apacheのap_make_etag()関数で生成されています。この関数はファ
イルに対するリクエストの場合
- ファイルのinode番号
- ファイルのファイルサイズ
- ファイルの更新時刻
> の情報を"-"で連結した文字列を生成し、ファイルに対するリクエ
ストではない場合は
- ap_set_last_modified()などでセットした更新時刻
> の文字列を生成します。
> なのでファイルへのアクセスを処理するコンテンツハンドラであ
れば、「他のスタティックなコンテンツ」と同じ形式のETagが生
成されますが、ファイルの実体を持たないコンテンツハンドラの
場合は最終更新日だけをつかったETagが生成されます。
と、これはset_etagメソッドでETagを設定する場合で、
set_etagメソッドを使わずに自分でETagを生成・セットすること
もできます。
>
[PRE[
% perl -e 'printf q{"%x-%x-%x"}, (stat("/docs/charset.html"))[1,7,9]'
>
;; 詳しくは$APACHE_SRC/main/http_protocol.cのap_set_etag()と
ap_make_etag()を見てください。
]PRE]
;; [CITE[[modperl:0415] Re: 実体ファイルのないリクエストに対する ETag ヘッダ値について]],
[[Hiroyuki OYAMA]], 2003年4月
<mid:200304021116.h32BGS2V051267@iris.glay.ne.jp>
** 仕様書から
** RFC 2295 (HTTP 透過内容折衝) 9.3 Assigning entity tags to variants
> To allow for correct revalidation of transparently negotiated
responses by clients, origin servers SHOULD generate all normal
entity tags for the neighboring variant resources of the negotiable
resource in such a way that
クライアントが[[透過折衝応答]]を正しく再検証することができるように、
起源サーバーは折衝可能資源の[[隣接変種資源]]についてのすべての通常の実体札を
>
- 1. the same tag is never used by two different variants,
unless this tag labels exactly the same entity on all occasions,
- 2. if one normal tag "X" is a prefix of another normal tag "XY",
then "Y" must never be a semicolon followed by a variant list validator.
- 2つの異なる変種について同じ札は絶対に使用しない。
但しこの札がすべての場合に本当に同じ実体を札付けする場合を除く。
- 通常の札 [SAMP(HTTP)[X]] が他の通常の札 [SAMP(HTTP)[XY]]
の接頭辞であるなら、 [SAMP(HTTP)[Y]] はセミコロンとそれに続く[[変種目録検証子]]には決してならない。
となるように生成する'''べきです'''。
** RFC の部分の License
[[RFCのライセンス]]
* メモ
[10]
[CITE@en-gb-x-gsnedders[gsnedders / HTTP Entity Tags Confusion]] ([TIME[2007-10-29 08:34:13 +09:00]] 版) <http://gsnedders.com/http-entity-tags-confusion>
([[名無しさん]])