1.CDNとは何ですか?
CDN の役割に関しては、電車の切符を購入する 8 年間の経験を使って説明できます:
8 年前には、電車の切符を販売するポイントはなく、12306.cn と会話することはさらに不可能でした。について。当時、鉄道の切符は駅の切符売り場でしか購入できず、私が住んでいた小さな郡では電車にアクセスできず、市内の駅で切符を購入する必要があり、時間がかかりました。郡から市内まで往復4時間のドライブは人生の無駄だ。その後、田舎の小さな町に電車の切符売り場ができて、市内の人々は切符を買うために一度に並ぶ必要がなくなり、とても便利になりました。 。
CDN は、ユーザーが Web サイトを閲覧すると、海南モバイル ユーザーのリクエストに応答するためにユーザーに最も近い CDN エッジ ノードを選択します。北京電信のコンピュータ ルームのサーバーまでは送信されません (発信局が北京電信のコンピュータ ルームに配置されていると仮定します)。
CDN の利点は明らかです。(1) CDN ノードは、事業者間および地域間アクセスの問題を解決し、アクセス遅延が大幅に減少します。(2) ほとんどのリクエストは CDN エッジ ノードで完了し、CDN が再生します。迂回の役割を果たし、元のサイトの負荷を軽減します。
2. キャッシュとは何ですか?
この記事では、CDN の背後にある高レベルのアーキテクチャについては詳しく説明しません。また、CDN がグローバル トラフィック スケジュール戦略を実装する方法についても説明しません。この記事は、CDN のインストール後にデータがどのようにキャッシュされるかに焦点を当てています。キャッシュは、時間と空間を交換する普遍的な例です。余分なスペースを使用することで、より高速な速度を得ることができます。
まず、CDN に Web サイトが接続されていないときに、ユーザーのブラウザがサーバーとどのように対話するかを見てみましょう:
ユーザーが Web サイトを閲覧すると、ブラウザは Web サイト内の画像やその他のファイルのコピーをローカルに保存できます。 , そのため、ユーザーが再度 Web サイトにアクセスしたときに、ブラウザーがすべてのファイルをダウンロードする必要がなくなり、ダウンロード量が削減されるということは、ページの読み込み速度が向上することを意味します。
CDN のレイヤーが途中で追加された場合、ユーザーのブラウザとサーバー間の対話は次のようになります。
クライアントのブラウザは、まずローカル キャッシュの有効期限が切れているかどうかを確認し、有効期限が切れた場合は、クライアント ブラウザへのリクエストを開始します。 CDN エッジ ノードは、ユーザーが要求したデータのキャッシュの有効期限が切れているかどうかを検出し、有効期限が切れていない場合は、ユーザーの要求に直接応答します。その後、CDN は最新のデータを取得するために、ソース リクエストを発信元サイトに送信する必要もあります。 CDN の典型的なトポロジ図は次のとおりです:
CDN が存在するシナリオでは、データがクライアント (ブラウザー) キャッシュと CDN エッジ ノード キャッシュの 2 つの段階を経ていることがわかります。詳細な分析
2. クライアント (ブラウザ) キャッシュ
クライアント キャッシュの欠点
クライアント キャッシュにより、サーバー リクエストが削減され、ファイルの繰り返しロードが回避され、ユーザー エクスペリエンスが大幅に向上します。ただし、Web サイトが更新されると (CSS、JS、画像ファイルの置き換えなど)、古いバージョンのファイルがブラウザーのローカルに保存されたままになり、予期しない結果が発生します。
かつて、ページが読み込まれるときに、ページ上の要素の位置がふらつき、ボタンのクリックに失敗することがありました。フロントエンド GG は、「キャッシュはクリアされましたか?」と尋ねてから、Ctrl キーを押すのが習慣でした。 +F5、すべてOKです。しかし、ブラウザのアドレス バーで Enter キーを押すだけ、または F5 を押すだけでは問題が解決されない場合があります。これらの 3 つの異なる操作方法がブラウザのキャッシュの更新方法を決定することをご存知ですか?
ブラウザはローカル ファイルを使用するかサーバー上の新しいファイルを使用するかをどのように判断するのでしょうか?いくつかの判断方法をご紹介します。
ブラウザキャッシュポリシー
Expires
Expires:Sat, 24 Jan 2015 20:30:54 GMT
HTTP 応答メッセージで Expires が設定されている場合、Expires が接続を期限切れにする前にそれを回避します。サーバ。このとき、ブラウザは、手持ちの素材が有効期限切れかどうかを判断するだけで、ブラウザにリクエストを送信する必要はありません。
キャッシュ制御: max-age
Expires メソッドは非常に優れていますが、毎回正確な時間を計算する必要があります。 max-age タグを使用すると、有効期限の処理が簡単になります。この情報は 1 週間しか使用できないと言えば十分です。
Max-age は、次のように秒単位で測定されます:
Cache-Control:max-age=645672
指定されたページは 645672 秒 (7.47 日) で期限切れになります。
Last-Modified
現在のファイルバージョンをブラウザに通知するために、サーバーは最終変更時刻を含むタグを送信します。例:
Last-Modified:Tue, 06 Jan 2015 08:26:32 GMT
次のようにブラウズします。ブラウザは、受信したファイルの作成時間を認識します。以降のリクエストでは、ブラウザは次のルールに従って検証します。
1. ファイル jquery.min.js が必要です。 2015 年 1 月 6 日火曜日 08:26:32 GMT 以降に変更されている場合は、私に送ってください。
2. サーバー: (ファイルの変更時間を確認してください)
3. サーバー: このファイルはそれ以降変更されていません。すでに最新バージョンを持っています。
4. ブラウザ: わかりました。ユーザーに表示します。
この場合、サーバーは 304 応答ヘッダーのみを返すため、応答データの量が削減され、応答速度が向上します。 304 応答については、次を参照してください。
http://www.cnblogs.com/ziyunfei/archive/2012/11/17/2772729.html
下の図は、F5 を押して更新した後に 304 応答ヘッダーを返すページを示しています。ページ。
ETag
通常、変更時間によるファイルの比較は機能します。ただし、サーバーの時計が間違っている、サーバーの時計が変更されている、夏時間 DST の到着後にサーバー時間が時間内に更新されていないなどの特殊な状況では、ファイル バージョンを比較する際に問題が発生します。変更された時間。
ETag を使用すると、この問題を解決できます。 ETag はファイルの一意の識別子です。ハッシュやフィンガープリントと同様に、各ファイルには、ファイルが変更されるたびに変更される個別の署名があります。
サーバーはETagタグを返します:
ETag:”39001d-1762a-50bf790757e00”
次のアクセスシーケンスは次のとおりです:
- ブラウザ: jquery.min.js ファイルが必要です。文字列「39001d-1762a-50bf790757e00」に一致しないものはありますか?
- サーバー: (ETag を確認してください...)
- サーバー: やあ、ここにあるバージョンも「39001d-1762a-50bf790757e00」です。すでに最新バージョンです
- ブラウザ: OK、ローカル キャッシュを使用できます
Last-modified と同様に、ETag はファイル バージョンの比較の問題を解決します。 ETag のレベルが Last-Modified よりも高いだけです。
追加タグ キャッシュタグは機能を停止することはありませんが、すでにキャッシュされているものを制御する必要がある場合があります。
l キャッシュ制御: パブリックとは、キャッシュされたバージョンがプロキシ サーバーまたは他の中間サーバーによって認識できることを意味します。
l キャッシュ制御: プライベートとは、このファイルがユーザーごとに異なることを意味します。ユーザー自身のブラウザのみがキャッシュできます。パブリック プロキシ サーバーはキャッシュを許可しません。
l キャッシュ制御: no-cache は、ファイルの内容をキャッシュすべきではないことを意味します。同じ URL に対して対応するコンテンツが変わるため、これは検索やページめくりの結果で非常に役立ちます。
- ブラウザ キャッシュの更新
ブラウザはリクエストが最も少ない Web ページのデータを取得し、すべてのコンテンツに対してローカル キャッシュを直接使用します有効期限が切れていないため、ブラウザへのリクエストが減少します。したがって、Expires タグと max-age タグはこのメソッドでのみ有効です。
ブラウザは必要なキャッシュ ネゴシエーションをリクエストに添付しますが、ブラウザはローカル キャッシュを直接使用することは許可されていません。Last-Modified と ETag を有効にすることはできます。期限切れの場合は無効です。
この方法は、キャッシュを使用せずに強制的に更新し、常に新しいリクエストを開始します。
CDN エッジ ノードのキャッシュ戦略はサービス プロバイダーによって異なりますが、通常は http 標準プロトコルに従い、http 応答ヘッダーの Cache-control: max-age フィールドを通じて CDN エッジ ノードのデータ キャッシュ時間を設定します。
クライアントが CDN ノードにデータを要求すると、CDN ノードはキャッシュされたデータの有効期限が切れているかどうかを判断し、期限切れでない場合はキャッシュされたデータをクライアントに直接返します。元のサイトへの戻りリクエスト。元のサイトから最新のデータを取得し、ローカル キャッシュを更新して、最新のデータをクライアントに返します。
CDN サービス プロバイダーは通常、ファイルのサフィックスとディレクトリに基づいて CDN キャッシュ時間を指定するための複数のディメンションを提供し、より洗練されたキャッシュ管理をユーザーに提供します。
CDN キャッシュ時間は「戻り率」に直接影響します。 CDN キャッシュ時間が短い場合、CDN エッジ ノード上のデータが失敗することが多く、その結果頻繁にオリジンに戻り、オリジン サイトの負荷が増加し、CDN キャッシュ時間が長すぎるとアクセス遅延も増加します。 、データ更新が遅いという問題が発生します。開発者は、特定のデータ キャッシュ時間管理を実行するには、特定のビジネスを追加する必要があります。
CDN キャッシュの更新
CDN エッジ ノードは、ブラウザ Ctrl+F5 を強制的に更新してブラウザのローカル キャッシュを無効にするのと比較して、開発者は「キャッシュを更新」インターフェイスを使用して次の目的を達成できます。 CDN エッジ ノード キャッシュをクリアします。このようにして、開発者は「キャッシュの更新」機能を使用して、データの更新後に CDN ノード上のデータ キャッシュを強制的に期限切れにし、クライアントがアクセス時に最新のデータを確実に取得できるようにすることができます。
以上がCDN キャッシュについて話すの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。