ETag
Entity Tag
「このresponseで返すresourceのversion」を表す識別子のようなもの
故に、resourceに変更があった後のresponseでは異なるETagを付与するようにする必要がある
ETagの生成アルゴリズム
使用するweb server libraryにも依る
Apacheの場合
以下を組み合わせて生成する
fileの最終修正時刻(last modified)
fileの中身のbyte数
Nginxの場合
Last-ModifiedとContent-Lengthから生成しているらしい
なんかあまり生成にコストが掛かるとは思えないなmrsekut.icon
コストが掛からないのであれば、↓の強弱の2種類ある意味が理解できない
コンテンツの中身をhashで計算して厳密にチェックするのかと思ったが、そこまでは厳密じゃないのか
↑の資料に強弱に対して言及されていないのもなぜなのか
version指定の厳密さで2種類の選択肢がある
コンテンツの中身を厳密にチェックしてETagを生成すると計算にコストが掛かるので、妥協策としてコストが低いが厳密な同値性を見ない弱いものがある
強いvalidation
e.g.
code:response
ETag: "10c24bc-4ab-457e1c1f"
弱いvalidation
弱いものであることを明示するために、先頭にW/を付ける
データとしては同値じゃなくても、内容が同じであることを示す
e.g.
code:respnose
ETag: W/"0815"
同じコンテンツなのにETagが変わる、のようなことを避ける
問題点
ホストしてるサーバーが複数台あるとややこしくなる
参考