ユーザーがWebページにアクセスしたときに、そのページのコンテンツをブラウザのキャッシュに保存しておくと、再度要求してダウンロードする必要がなくなります。ブラウザのキャッシュを効率的に使用することで、エンド ユーザーの応答時間を短縮し、帯域幅の使用量を削減することができます。
ブラウザ上のアイテムがキャッシュ可能かどうかは、以下によって決まります。
アイテムがキャッシュ可能であり、それが「新規」であるとみなされると、ブラウザは、再度アクセスした際にキャッシュからアイテムを取得します。新規かどうかは、以下によって判断されます。
表示内容が古い場合や、有効な有効期限内ではない場合、ブラウザは元のWebサーバーにコンテンツの検証を依頼し、そのコピーを提供可能かどうかを確認します。ローカルにキャッシュされたコピーがまだ使用可能である場合は、それをブラウザに伝えるためにWebサーバーは応答コード304を返します。コンテンツが変更されている場合は、Webサーバーは応答コード200を返し、新しいバージョンを提供します。
ブラウザのキャッシュの使用方法は、主に次の3つに基づいています。
ユーザーは、キャッシュされたコンテンツをどのように保存してローカル キャッシュから提供するか、またはコンテンツをまったくキャッシュしないようにするかどうかを設定することができます。Internet ExplorerとFirefoxでは、これらの分類が少し異なります。
ユーザーが以前アクセスしたページに戻ると、ブラウザは元のWebサーバーを確認して、最後に表示した後にページが変更されたかどうかを判断します。
同じブラウザ セッション内でページに再度アクセスした場合、コンテンツはキャッシュから提供されます。ブラウザを閉じた後に再度開いた場合、コンテンツが変更されたかどうかを確認するための要求が送信されます。同じブラウザ セッション中にページにアクセスした場合、元のWebサーバーからコンテンツをダウンロードするのではなく、キャッシュされたファイルが使用されます。
ブラウザを閉じた後に再度開いてアクセスした場合、キャッシュされたコンテンツの有効期間の設定が使用されます。1回のブラウザ セッション中に同じページにアクセスした場合は、キャッシュされたファイルが使用されます。これはInternet ExplorerとFirefoxのデフォルトの設定です。
ブラウザは、新しいコンテンツがあるかどうかを元のWebサーバーで確認しません。
これらの設定は、IEとFirefoxで以下の手順で行います。
一般的なキャッシュの設定に加えて、SSLコンテンツをキャッシュするかどうかを制御するための追加設定があります。このオプションが有効になっている場合、SSLコンテンツはディスクに保存されません。これには静的な画像も含まれ、ページにアクセスするたびにコンテンツを要求するようにブラウザが設定されます。Internet Explorerではデフォルトで無効になっており、Firefoxではデフォルトで有効になっています。
SSLコンテンツのキャッシュの有効/無効を切り替えるには、次の手順に従います。
コンテンツをキャッシュから取得するには、URLがキャッシュ内のコンテンツと完全に一致していなければなりません。Web開発者の中には、コンテンツがキャッシュされず、常に「新規」とみなされるようにするために、クエリ文字列の一部に乱数を追加する人もいます。これらのランダムなクエリ文字列がURLに追加されると、ブラウザはそのコンテンツが既にキャッシュされているアイテムと同じものであるとは認識せず、その要素に対して新しいGET要求を発行します。
ほとんどのインスタンスでは、コンテンツのキャッシュ動作はCache-ControlヘッダーとExpires HTTPヘッダーによって制御されます。Cache-Controlヘッダーは、コンテンツをキャッシュできるかどうかとその期間を指定します。値には次のようなものがあります。
Expiresヘッダーのみを含め、Cache-Controlヘッダーがない場合は、ブラウザとパブリック/共有キャッシュの両方がコンテンツをキャッシュできることを示し、以下に示すように指定された日時を経過した後は古いとみなされます。
(Status-Line) HTTP/1.1 200 OK Content-Length 4722 Content-Type image/gif Date Fri, 31 Aug 2007 10:20:29 GMT Expires Sun, 17 Jan 2038 19:14:07 GMT Last-Modified Wed, 07 Jun 2006 23:55:38 GMT URL in cache? Yes Expires 19:14:07 Sun, 17 Jan 2038 GMT Last Modification 23:55:38 Wed, 07 Jun 2006 GMT Last Cache Update 10:20:32 Friday, August 31, 2007 GMT Last Access 10:20:31 Friday, August 31, 2007 GMT ETag Hit Count 1
Cache-ControlヘッダーやExpiresヘッダーがない場合、ブラウザは以下のように有効期限のないコンテンツをキャッシュします。
Headers: (Status-Line) HTTP/1.1 200 OK Accept-Ranges bytes Connection Keep-Alive Content-Length 221 Content-Type Image/gif Date Fri, 31 Aug 2007 10:27:06 GMT Last-Modified Fri, 02 Jun 2006 09:46:32 GMT URL in cache? Yes Expires (Not set) Last Modification 09:46:32 Friday, June 02, 2006 GMT Last Cache Update 10:26:32 Friday, August 31, 2007 GMT Last Access 10:26:31 Friday, August 31, 2007 GMT ETag Hit Count 1
一部のWeb開発者は、コンテンツをどのようにキャッシュするかを制御するために、HTTPヘッダーにキャッシュ パラメータを設定するのではなく、METAタグを使用しています。キャッシュの動作を制御するには、HTTPヘッダーの使用が推奨されています。
コンテンツ変数に使用できる値は次の4つです。
このコマンドを受け取ると、ブラウザはコンテンツをローカルにキャッシュしません。これはCache-Control=No-Cacheヘッダーの送信と実質的に同じです。
refresh要素を使用すると、ユーザーを別のページにリダイレクトするか、一定時間後にページを更新するようにブラウザに指示することができます。refreshタグは、ブラウザの更新ボタンを押したときと同じように動作します。コンテンツが有効な有効期限内である場合でも、ブラウザは元のサーバーに対して変更されていないかどうかの検証を求めます。これでは、コンテンツの有効期限を設定する意味が本質的に失われてしまいます。
METAタグにURLが指定されている場合、一定時間後に指定されたURLにリダイレクトするようにブラウザに指示します。HTTP-Responseヘッダーではなく、METAタグを使ってユーザーをリダイレクトすることは推奨されていません。METAによる更新は、ブラウザのセキュリティ設定で、ユーザーがオフにすることができるためです。
再度アクセスしたときにキャッシュからコンテンツがどのように取得されるかは、要求の発行方法に基づきます。
同じブラウザ セッション内では、サイトのすべてのコンテンツがローカルのブラウザ キャッシュから取得されます。ユーザーがあるアプリケーションの複数のページをクリックし、各ページに同じグラフィックや要素がある場合、元のWebサーバーに要求は送信されません。代わりにローカル キャッシュから取得されます。ユーザーがそのセッション中にページに再度アクセスした場合は、下の画像に示すように(ブラウザの設定によって異なります)、HTMLを含むすべてのコンテンツがローカル キャッシュから取得されます。ブラウザを閉じるとすぐに、セッション キャッシュはクリアされ、次のセッションでは、ディスク キャッシュのみが使用されます。
ユーザーは、スポーツの最新の得点やニュース記事などの新しいコンテンツを確認するためにページの更新ボタンを押すことがあります。更新ボタンを押すと、キャッシュされたコンテンツの有効期限に関係なく、現在ディスク キャッシュ上にあるすべてのコンテンツについて「If-None-Match」ヘッダーが元のWebサーバーに送信されます。その結果、下の画像に示すように、現在ブラウザのキャッシュにある再利用可能な各アイテムについて応答コード304が返されます。
CTRLと更新ボタン(Internet Explorerのみ)、またはCTRL + F5(Internet ExplorerとFirefox)を押すと、要求に「Cache-Control=no-cache」ヘッダーが埋め込まれ、その結果、すべてのコンテンツが元のサーバーから直接提供され、ローカル ブラウザ キャッシュからはコンテンツが提供されません。下の画像のように、すべてのコンテンツがサーバーから直接提供されたことを示す応答コード200がすべてのオブジェクトに含まれます。
新しいブラウザ セッションが開始され、ユーザーが頻繁にアクセスしているサイトに戻った場合、(ブラウザの設定に基づいて)ローカル ブラウザのキャッシュが使用されます。キャッシュされたコンテンツが有効な有効期限内である場合は、キャッシュからコンテンツが直接提供され、元のWebサーバーへの要求は発行されません。コンテンツが有効な有効期限内ではない場合、ブラウザは要求に「If-modified-since」または「If-none-match」ヘッダーを埋め込みます。コンテンツが変更されていない場合、サーバーからコード304が返され、コンテンツはキャッシュから取得されます。一方、コンテンツが変更されている場合、サーバーはコード200を返し、ユーザーにコンテンツを提供します。
BIG-IP® WebAccelerator™を頻繁に使用する場合、以下の推奨設定を使用すると非常に便利です。これらの設定を使用すると、WebAcceleratorのIntelligent Browser Referencing機能を最大限に活用できます。
静的コンテンツにランダムなクエリ パラメータが含まれていてキャッシュできない場合は、iRuleを使用してこれらのランダム パラメータを削除してキャッシュできるようにすることができます。
前述のように、アプリケーションのキャッシュ動作を制御するには、METAタグではなくHTTPヘッダーの使用が推奨されています。METAタグを使用すると、アクセラレーションがエンドユーザーにもたらすメリットをなくす可能性があります。METAタグは、iRulesやカスタムの書き換えスクリプトを使用することで排除できます。METAタグを排除することで、エンド ユーザーはIntelligent Browser Referencingのメリットを実感できます。
アクセラレーションの有無によるアプリケーションの違いを確認するには、新しいブラウザ セッションを開始する必要があります。再度アクセスしたときにページを読み込む他の3つの方法では、アクセラレーションの有無による違いは感じられません。
再度アクセスしたときにブラウザがコンテンツをダウンロードする必要性をなくすことにより、Webアプリケーションのパフォーマンスが大幅に向上する可能性があります。ブラウザの設定、Webサイト、ユーザーの動作など、再度アクセスしたときにローカル ブラウザ キャッシュからコンテンツが取得されるかどうかに影響を与える要因は数多くあります。BIG-IP WebAcceleratorは、アプリケーションを変更することなく、ユーザーのキャッシュの利用率を向上させることができます。