Optimization前書きインテリジェントコンテンツキャッシュは、サイトの訪問者のエクスペリエンスを向上させる最も効果的な方法の1つです。キャッシュ、または以前のリクエストからのコンテンツを一時的に保存することは、HTTPプロトコル内で実装されるコアコンテンツ配信戦略の一部です。配信パス全体のコンポーネントは、コンテンツに対して宣言されたキャッシングポリシーに従って、すべてのアイテムをキャッシュして後続のリクエストを高速化できます。このガイドでは、Webコンテンツキャッシングの基本概念のいくつかについて説明します。これは主に、キャッシュポリシーを選択して、インターネット全体のキャッシュがコンテンツを正しく処理できるようにする方法について説明します。キャッシングが提供する利点、注意すべき副作用、およびパフォーマンスと柔軟性の最適な組み合わせを提供するために採用するさまざまな戦略について説明します。キャッシングとはキャッシングは、後続のリクエストを高速化するために再利用可能な応答を保存するための用語です。さまざまなタイプのキャッシュが利用可能で、それぞれに独自の特性があります。アプリケーションキャッシュとメモリキャッシュは両方とも、特定の応答を高速化する能力があるため人気があります。このガイドの焦点であるWebキャッシングは、異なるタイプのキャッシュです。Webキャッシングは、システム全体として認識される応答性を改善しながら、ネットワークトラフィックを最小限に抑えることを目的としたHTTPプロトコルのコア設計機能です。キャッシュは、元のサーバーからブラウザまでのコンテンツのすべてのレベルで見つかります。Webキャッシュは、特定のルールに従って要求のHTTP応答をキャッシュすることにより機能します。キャッシュされたコンテンツに対する後続のリクエストは、リクエストをWebサーバーに送り返すのではなく、ユーザーに近いキャッシュから実行できます。効果的なキャッシングは、コンテンツコンシューマーとコンテンツプロバイダーの両方を支援します。キャッシュがコンテンツ配信にもたらす利点のいくつかは次のとおりです。ネットワークコストの削減:コンテンツは、コンテンツコンシューマとコンテンツオリジン間のネットワークパスのさまざまなポイントでキャッシュできます。コンテンツがコンシューマの近くにキャッシュされると、リクエストによってキャッシュを超えるネットワークアクティビティが追加されることはありません。応答性の向上:キャッシュにより、ネットワーク全体のラウンドトリップが不要になるため、コンテンツをより高速に取得できます。ブラウザのキャッシュのように、ユーザーの近くに保持されるキャッシュにより、この取得をほぼ瞬時に行うことができます。同じハードウェアでのパフォーマンスの向上:コンテンツが生成されたサーバーでは、積極的なキャッシュを許可することで、同じハードウェアからより多くのパフォーマンスを引き出すことができます。コンテンツ所有者は、配信パスに沿って強力なサーバーを活用して、特定のコンテンツの負荷を簡単に受けることができます。ネットワークの中断中のコンテンツの可用性:特定のポリシーでは、オリジンサーバーから短時間利用できない場合でも、キャッシュを使用してコンテンツをエンドユーザーに提供できます。用語キャッシングを扱うとき、見慣れないかもしれないいくつかの用語があります。一般的なもののいくつかを以下に示します。Originサーバー*:オリジンサーバーは、コンテンツの元の場所です。Webサーバー管理者として機能している場合、これが制御するマシンです。要求ルートに沿ってキャッシュから取得できなかったコンテンツを処理し、すべてのコンテンツのキャッシングポリシーを設定します。キャッシュヒット率:キャッシュの有効性は、キャッシュヒット率またはヒット率で測定されます。これは、キャッシュから取得できるリクエストと、行われたリクエストの合計の比率です。キャッシュヒット率が高いということは、高い割合のコンテンツをキャッシュから取得できたことを意味します。これは通常、ほとんどの管理者にとって望ましい結果です。鮮度:鮮度とは、キャッシュ内のアイテムがまだクライアントに提供される候補と見なされるかどうかを表すために使用される用語です。キャッシュ内のコンテンツは、キャッシュポリシーで指定された鮮度の時間枠内にある場合にのみ応答に使用されます。古いコンテンツ:キャッシュ内のアイテムは、キャッシュポリシーのキャッシュ鮮度設定に従って期限切れになります。期限切れのコンテンツは「古くなっています」。一般に、期限切れのコンテンツを使用してクライアントの要求に応答することはできません。オリジンサーバに再接続して、新しいコンテンツを取得するか、少なくともキャッシュされたコンテンツがまだ正確であることを確認する必要があります。検証:有効期限を更新するために、キャッシュ内の古いアイテムを検証できます。検証では、オリジンサーバーにチェックインして、キャッシュされたコンテンツがまだ最新バージョンのアイテムを表しているかどうかを確認します。無効化:無効化は、指定された有効期限の前にキャッシュからコンテンツを削除するプロセスです。これは、アイテムが元のサーバーで変更されており、キャッシュに古いアイテムがあるとクライアントに重大な問題が発生する場合に必要です。他にも多くのキャッシング用語がありますが、上記の用語は開始に役立つはずです。キャッシュできるもの特定のコンテンツは、他のコンテンツよりもキャッシングに適しています。ほとんどのサイトで非常にキャッシュに優しいコンテンツは次のとおりです。一般的な回転しない画像(ナビゲーションアイコンなど)スタイルシート一般的なJavaScriptファイルダウンロード可能なコンテンツメディアファイルこれらはめったに変更されない傾向があるため、より長い期間キャッシュされることでメリットが得られます。キャッシュに注意する必要があるいくつかのアイテムは次のとおりです。頻繁に変更されるJavascriptとCSS認証Cookieで要求されたコンテンツほとんど決してキャッシュされるべきではないいくつかのアイテムは次のとおりです。機密データに関連する資産(銀行情報など)ユーザー固有で頻繁に変更されるコンテンツ上記の一般的な規則に加えて、さまざまな種類のコンテンツを適切にキャッシュできるポリシーを指定することができます。認証されたすべてのユーザーがサイトの同じビューを見る場合、そのビューをどこにでもキャッシュできる可能性があります。認証されたユーザーが、しばらくの間有効なサイトのユーザー依存ビューを見る場合、ユーザーのブラウザーにキャッシュするように指示できますが、中間キャッシュにはビューを保存しないように指示できます。Webコンテンツがキャッシュされる場所コンテンツは、配信チェーン全体のさまざまなポイントでキャッシュできます。ブラウザキャッシュ:Webブラウザ自体は小さなキャッシュを保持します。通常、ブラウザは、キャッシュする最も重要なアイテムを指定するポリシーを設定します。これは、ユーザー固有のコンテンツ、またはダウンロードに費用がかかり、再度要求される可能性が高いと思われるコンテンツである可能性があります。中間キャッシュプロキシ:クライアントとインフラストラクチャの間にあるサーバーは、必要に応じて特定のコンテンツをキャッシュできます。これらのキャッシュは、ISPまたは他の独立した当事者によって維持される場合があります。リバースキャッシュ:サーバーインフラストラクチャは、バックエンドサービス用に独自のキャッシュを実装できます。これにより、リクエストごとにバックエンドサーバーにアクセスする代わりに、連絡先からコンテンツを提供できます。これらの各場所は、独自のキャッシュポリシーとコンテンツオリジンで設定されたポリシーに従って、アイテムをキャッシュできます。キャッシングヘッダーキャッシングポリシーは、2つの異なる要因に依存しています。キャッシングエンティティ自体が、受け入れ可能なコンテンツをキャッシュするかどうかを決定します。キャッシュすることが許可されているよりも少ないが、それ以上ではないことを決定できます。キャッシュ動作の大部分は、コンテンツ所有者によって設定されるキャッシュポリシーによって決定されます。これらのポリシーは、特定のHTTPヘッダーを使用して主に明示されます。HTTPプロトコルのさまざまな反復を通じて、洗練されたさまざまなレベルのいくつかの異なるキャッシュ中心のヘッダーが作成されました。注意を払う必要があるものは以下のとおりです。+`ヘッダーは非常に簡単ですが、スコープはかなり制限されています。基本的に、コンテンツの有効期限が切れる将来の時間を設定します。この時点で、同じコンテンツに対する要求はすべてオリジンサーバーに戻される必要があります。このヘッダーは、おそらくフォールバックとしてのみ使用するのが最適です。Expires`ヘッダーのより最近の代替です。十分にサポートされており、はるかに柔軟な設計を実装しています。`よりも望ましいですが、両方の値を設定しても害はないかもしれません。+`で設定できるオプションの詳細について説明します。`ヘッダーはキャッシュ検証で使用されます。」を送り返すことができます。*:このヘッダーは、アイテムが最後に変更された時刻を指定します。これは、新鮮なコンテンツを確保するための検証戦略の一部として使用できます。+`ヘッダーは重要です。特定のソフトウェアは、スペースを予約する必要があるコンテンツのサイズが事前にわからない場合、コンテンツのキャッシュを拒否します。*:通常、キャッシュは、要求されたホストとリソースへのパスをキャッシュアイテムを保存するキーとして使用します。`ヘッダーを使用して、リクエストが同じアイテムに対するものかどうかを判断するときに、追加のヘッダーに注意を払うようキャッシュに指示できます。+`ヘッダーによってキーを指定するために最も一般的に使用されるため、キャッシュは圧縮コンテンツと非圧縮コンテンツを区別することができます。+`ヘッダーは、キャッシュ内のエントリを希釈することを犠牲にして、同じコンテンツの異なるバージョンを保存する機能を提供します。`ヘッダーを設定すると、圧縮されたコンテンツと圧縮されていないコンテンツの間で重要な区別を行うことができます。これは、圧縮されたコンテンツを処理できないブラウザにこれらのアイテムを正しく提供するために必要であり、基本的な使いやすさを提供するために必要です。+`に適している可能性があることを示す特徴の1つは、可能な値が2つまたは3つしかないことです。User-Agent」のようなアイテムは、一見すると、モバイルブラウザーとデスクトップブラウザーを区別してサイトの異なるバージョンを提供するための良い方法のように思えるかもしれません。User-Agent`文字列は非標準なので、結果はキャッシュヒット率が非常に低い中間キャッシュ上の同じコンテンツの多くのバージョンになる可能性があります。+`ヘッダーは控えめに使用する必要があります。制御する中間キャッシュ内のリクエストを正規化する機能がない場合(たとえば、コンテンツ配信ネットワークを活用する場合など)。+`ヘッダーが最新のキャッシュポリシー仕様にどのように使用されるかを説明しました。このヘッダーを使用して、複数の異なるポリシー指示を設定できます。複数の指示をコンマで区切ります。Cache-Control`オプションの一部は次のとおりです。*:この命令は、キャッシュされたコンテンツがクライアントに提供される前に各リクエストで再検証される必要があることを指定します。これにより、コンテンツはすぐに古くなったものとしてマークされますが、再検証手法を使用してアイテム全体を再度ダウンロードすることを回避できます。*:この命令は、コンテンツをキャッシュできないことを示します。これは、応答が機密データを表す場合に設定するのに適しています。*:これはコンテンツをパブリックとしてマークします。ブラウザーと任意の中間キャッシュによってキャッシュできることを意味します。+」のマークが付けられます。このヘッダーはその設定を上書きします。+`としてマークします。プライベートコンテンツはユーザーのブラウザに保存される場合がありますが、中間者がキャッシュすることはできません。これは多くの場合、ユーザー固有のデータに使用されます。*:この設定は、オリジンサーバーからコンテンツを再検証または再ダウンロードする必要がある前に、コンテンツがキャッシュされる最大年齢を設定します。+`ヘッダーを置き換え、コンテンツの新鮮さを判断するための基礎となります。1年(31536000秒)です。+`設定と非常に似ています。違いは、このオプションが中間キャッシュにのみ適用されることです。これを上記と組み合わせると、より柔軟なポリシー構築が可能になります。+`ヘッダーで示される鮮度情報に厳密に従う必要があることを示します。古いコンテンツは、いかなる状況でも提供できません。これにより、ネットワークの中断などのシナリオでキャッシュされたコンテンツが使用されなくなります。*:これは上記の設定と同じように動作しますが、中間プロキシにのみ適用されます。この場合、ネットワークの中断時に古いコンテンツを提供するためにユーザーのブラウザを使用できる可能性がありますが、中間キャッシュをこの目的に使用することはできません。*:このオプションは、どのような状況でもパフォーマンス上の理由で受信したコンテンツを変更できないことをキャッシュに伝えます。これは、例えば、キャッシュが、オリジンサーバーから受信しなかったコンテンツの圧縮バージョンを圧縮して送信できず、許可されないことを意味します。これらをさまざまな方法で組み合わせて、さまざまなキャッシュ動作を実現できます。相互に排他的な値は次のとおりです。no-cache`に優先します。