RSS自動解析で分かる集合知まとめサイト2.0(2/4 ページ)

» 2007年12月11日 07時30分 公開
[大澤文孝,ITmedia]

a)要求時にIf-Modified-Sinceヘッダを付ける

 Webサーバに対してコンテンツの要求をする際に、「If-Modified-Since」というヘッダを使って日時を渡す。

b)更新されていなければ304ステータスコードが戻る

 このヘッダに対応しているWebサーバの場合、もし、a)で指定した日時以降に、コンテンツが更新されていないのであれば、「304 Not Modified」というヘッダが戻り、コンテンツの本体(ボディ部)は返されない。そうではなく更新されているのであれば、通常通り、「200 OK」というヘッダが戻り、コンテンツの本体が返される。

図1■If-Modified-Sinceヘッダを使って更新された時に限り、コンテンツを取得する

 この仕組みを使えば、コンテンツの再取得を最低限に抑えることができる。ただし、すべてのサーバでこの処理が有効になるとは限らない。例えば、CGIによって動的に作られるページの場合は、Last-Modifiedヘッダには、常にリクエストした日時が返されることもある。

 似た仕組みとしてETagヘッダとIf-None-Matchヘッダを使う方法もある。これはコンテンツごとに設定されるユニークな値(ハッシュ値)を比較することで、更新されたかどうかを調べるものである。

LWPモジュールを使ってコンテンツを取得する

 上記で述べた2点を考慮し、作った関数をリスト1に示す。リスト1のgetWebContent関数は、次のようにして呼び出すことを想定している。


my ($content, $lastmodified) = 
  getWebContent(URL, 最終更新日時);

 最終更新日時にundef値を渡した場合には、If-Modified-Sinceヘッダを付加しないようにしている。

 次ページにリスト1を示す。

Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ