a)要求時にIf-Modified-Sinceヘッダを付ける
Webサーバに対してコンテンツの要求をする際に、「If-Modified-Since」というヘッダを使って日時を渡す。
b)更新されていなければ304ステータスコードが戻る
このヘッダに対応しているWebサーバの場合、もし、a)で指定した日時以降に、コンテンツが更新されていないのであれば、「304 Not Modified」というヘッダが戻り、コンテンツの本体(ボディ部)は返されない。そうではなく更新されているのであれば、通常通り、「200 OK」というヘッダが戻り、コンテンツの本体が返される。
この仕組みを使えば、コンテンツの再取得を最低限に抑えることができる。ただし、すべてのサーバでこの処理が有効になるとは限らない。例えば、CGIによって動的に作られるページの場合は、Last-Modifiedヘッダには、常にリクエストした日時が返されることもある。
似た仕組みとしてETagヘッダとIf-None-Matchヘッダを使う方法もある。これはコンテンツごとに設定されるユニークな値(ハッシュ値)を比較することで、更新されたかどうかを調べるものである。
上記で述べた2点を考慮し、作った関数をリスト1に示す。リスト1のgetWebContent関数は、次のようにして呼び出すことを想定している。
my ($content, $lastmodified) =
getWebContent(URL, 最終更新日時);
最終更新日時にundef値を渡した場合には、If-Modified-Sinceヘッダを付加しないようにしている。
次ページにリスト1を示す。
Copyright © ITmedia, Inc. All Rights Reserved.