キャッシュ
データの“鮮度”をチェック

 次に,プロキシ・サーバーの主要機能であるキャッシュのしくみを見てみよう。キャッシュとは,一度アクセスしたWebサーバーのデータを,プロキシ・サーバーが保持しておくこと。そして,再度クライアントがそのデータを要求したときには,持っていたデータを返答する。

図5 キャッシュのしくみ
プロキシ・サーバーは,Webサーバーから来たデータを中継するときにそのデータを保存(キャッシュ)する。プロキシ・サーバーは,自分の持っているデータが更新されているかどうかをWebサーバーに問い合わせて,データの鮮度を確認する。

まずは有効期限をチェックする

 一般的なプロキシ・サーバーのキャッシュのしくみを,クライアントがWebアクセスするときの流れに合わせて見ていこう(図5[拡大表示])。まず,クライアントが目的のWebページのリクエストをプロキシ・サーバーに送る(1)。するとプロキシ・サーバーは,要求されたデータが自身のキャッシュにあるのか,ある場合はそのデータの有効期限が切れていないかどうかをチェックする(2)。

 キャッシュとして保存されているデータには,元のURLや有効期限などの属性情報が付随している。そしてデータの有効期限が切れていない場合は,そのデータをクライアントに返す。プロキシ・サーバーは実際のWebサーバーへアクセスしないのだ。

更新されていたときだけ持ってくる

 一方,プロキシ・サーバーの保持しているデータの有効期限が切れているときはどうなるか。

 このときは,HTTPリクエストに,「If-modified-since」というヘッダーを付けて,Webサーバーへリクエストを出す。例えば,
GET /index.html HTTP/1.1 …If-modified-since: Fri, 03 Nov 2000 10:00:00 GMT
と指定した場合,これは「2000年11月3日の10時以降に更新されていたら,/index.htmlがほしい」という意味である。すると,これを受信したWebサーバーは,自分自身の /index.htmlが指定された日時以降に更新されているかどうかを調べる。そして,更新されていた場合は,通常のレスポンスと同じように,
HTTP/1.1 200 OK
というメッセージとともに,更新されたデータをプロキシ・サーバーへ返す。

 一方,Webサーバーのデータが更新されていなかった場合は,要求されたデータが更新されていないことを知らせるために,
HTTP/1.1 304 Not modified
というメッセージだけを,プロキシ・サーバーへ返信する(3)。この中にはWebページのデータは含まれない。

 そして最後。プロキシ・サーバーがWebサーバーから最新データを受け取ったときには,それをクライアントに返し,更新されていなかったときには,キャッシュのデータを返す(4)。