nginx ベースのブラウザネゴシエーションキャッシュプロセスの詳細な説明

nginx ベースのブラウザネゴシエーションキャッシュプロセスの詳細な説明

この記事は主に、nginx に基づいてブラウザネゴシエーションキャッシュを設定する詳細なプロセスを紹介します。この記事のサンプルコードは非常に詳細で、皆さんの勉強や仕事に一定の参考値があります。困っている友人はそれを参考にすることができます。

強力なキャッシュとネゴシエートされたキャッシュの違い

強力なキャッシュ: ブラウザはサーバーとネゴシエートせず、ブラウザのキャッシュに直接アクセスします。

ネゴシエートされたキャッシュ: ブラウザは、リソースをキャッシュから取得するか、再度取得するかを決定する前に、まずサーバーでリソースの有効性を確認します。

ネゴシエーションキャッシュの仕組み

ここで、次のようなビジネス シナリオがあります。バックエンドの静的リソースは随時更新され、ブラウザーはデフォルトで強力なキャッシュを使用するため、古くなったリソースはデフォルトでブラウザー キャッシュから取得されます。

ここで、ブラウザがリソースを取得するたびに、リソースが更新されたかどうかをバックエンドに確認するようにしたいので、ネゴシエートされたキャッシュを使用するようにブラウザを設定する必要があります。

では、バックエンドはリソースが更新されたかどうかをどのように判断するのでしょうか?このとき、Etag と Last-Modified の 2 つの応答ヘッダーが使用されます。

静的リソースのリクエストが受信されるたびに、バックエンドはリソースの最終変更時刻 (Last-Modified) と、リソース コンテンツに基づいて計算された Etag をフロントエンドへのレスポンス ヘッダーに配置します。

応答を受信した後、フロントエンドはこれら 2 つの項目をキャッシュし、次に同じリソースが要求されたときに、これら 2 つの項目の内容を If-Modified-Since および If-None-Match 要求ヘッダーに格納します。

サーバーは、これら 2 つの項目を受信すると、それらをリソースによって現在生成されている Etag および Last-Modified と比較します。 2 つが一致する場合、リソースは更新されていないことを意味し、サーバーは 304 の空の応答を返します。 一致しない場合は、リソースが更新されたことを意味し、サーバーは完全なリソース コンテンツを返します。

成し遂げる

では、このような複雑なプロセスをどのように実装するのでしょうか?実際、それは非常に簡単です。静的リソースのサーバーとして nginx を使用し、応答ヘッダーに Cache-Control: no-cache を追加するだけです。

段階的に実装してみましょう

1. 静的リソースサーバーとしてnginxを使用する

nginxの設定では、静的リソースのリクエストをリソースのディスクパスにマッピングします。

http {
  サーバー{
  聞く 80;
  ...
  場所 /画像/ {
    エイリアス D:/luozixi/tcp_test/picture/;
    # エイリアスは再定義されたパスです# たとえば、127.0.0.1/picture/1_new.gif にアクセスすると、D:/luozixi/tcp_test/picture/1_new.gif へのアクセスにマップされます
    # Web アプリケーションはリクエストを一切受信せず、画像に対するすべてのリクエストは nginx によって処理されます # エイリアスは置換、ルートは連結です autoindex on;
    # 127.0.0.1/picture/ にアクセスすると、ディレクトリ インデックス インターフェイスが表示されます}
  }
}

2. nginxの設定をリロードする

nginx -s リロード

3. この時点で、静的リソースを要求すると、nginxは自動的にEtagとLast-Modifiedをレスポンスヘッダーに追加します。

4. しかし、Cache-Contrl: no-cacheが設定されていない場合、ブラウザは次回このリソースをリクエストするときにバックエンドにリクエストを送信せず、キャッシュから直接リソースを取得することがわかりました。

5. nginxでの設定

場所 /画像/ { 
  add_header Cache-Control no-cache;
  エイリアス D:/luozixi/tcp_test/picture/; 
}

6. ブラウザ キャッシュをクリアすると、最初のリクエストは通常​​の 200 レスポンスが返され、レスポンス ヘッダーにはネゴシエートされたキャッシュが使用されていることを示す Cache-Control: no-cache がすでに含まれています。

7. リクエストを再度開始すると、リクエストヘッダーにIf-Modified-SinceとIf-None-Matchの2つの項目があることがわかります。

8. これら 2 つの項目を受け取った後、サーバー (nginx) はそれらをリソースによって現在生成された Etag および Last-Modified と比較します。 2 つが一致している場合は、リソースが更新されていないことを意味し、サーバーは 304 の空の応答を返します。 一致していない場合は、リソースが更新されたことを意味し、サーバーは完全なリソース コンテンツを返します。

さらに、サーバーが If-Modified-Since を検証する方法は、単純な文字列比較だけです。リソースの Last-Modified が If-Modified-Since よりも前の場合でも、サーバーはリソースが更新されていると見なします。

9. 304 応答を受信すると、ブラウザはブラウザ キャッシュからリソースを取得します。スピードがとても速いです

キャッシュなしとストアなしの違い

no-cache は、期限切れのリソースがキャッシュされないことを意味します。キャッシュは、サーバーからの有効な処理確認後にリソースを処理します。

また、ストアがないということは、キャッシュがないことを意味します。

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Nginxとブラウザキャッシュの扱い方
  • Nginx サーバーでローカル ブラウザ キャッシュを設定する簡単な方法を説明します。
  • Nginxサーバのブラウザローカルキャッシュと仮想マシンの関連設定
  • オペレーターが知っておくべき 18 個の Nginx プロキシ キャッシュ構成のヒント (どれを知っていますか?)
  • Nginx コンテンツ キャッシュと共通パラメータ設定の詳細
  • nginx キャッシュサーバーに静的ファイルを設定する方法
  • Nginx で proxy_cache を有効にする方法
  • Nginx リバース プロキシとキャッシュおよびキャッシュのクリア方法
  • nginx キャッシュがキャッシュされない原因と解決策

<<:  Node.js mysqlクライアントが認証プロトコルをサポートしていない問題を解決する

>>:  MySQLデータベースのマスタースレーブレプリケーションの長い遅延に対する解決策

推薦する

js は丸で囲まれた数字のリストのサンプルコードを動的に追加します

1. まず本文にulタグを追加します <!-- 順序なしリスト --> <ul i...

setup+ref+reactive は vue3 の応答性を実装します

セットアップは、結合された API を記述するために使用されます。テンプレートが使用できるようにする...

Angularルーティングサブルートの詳細な説明

目次1. サブルート構文2. 例1. 2つの新しいコンポーネントを作成し、その内容を変更する2. ル...

Vue3でアイコンを使用する2つの例

目次1. SVGを使用する2. fontAwesomeを使用する3 ソース4 結論テクノロジースタッ...

1つの記事でJavaScript DOM操作の基本を学ぶ

DOM の概念DOM: ドキュメント オブジェクト モデル: ドキュメント オブジェクト モデルは、...

Vue のトランジション効果とアニメーショントランジションの使用例の詳細な説明

目次遷移フック関数カスタム遷移クラス名遷移グループの使用まとめまずは例を見てみましょうコードは次のと...

React仮想リストの実装

目次1. 背景2. バーチャルリストとは何か3. 関連概念の紹介4. 仮想リストの実装4.1 ドライ...

Linux がますます人気になっている 10 の理由

Linux はますます多くのユーザーに愛されてきました。なぜ Linux はこれほど急速に発展し、い...

Vueにおけるキーの役割と原理の詳細な説明

目次1. 結論から始めましょう2. キーの役割2.1 例2.2 上記の例を修正する2.3 例を再度修...

ES6 Promiseの使い方の詳細な説明

目次約束とは何ですか?拒否の使用法キャッチの使い方すべての使用法レースの使用約束とは何ですか? Pr...

Vue は携帯電話の認証コードによるログインを実装します

この記事では、携帯電話認証コードログインを実装するためのVueの具体的なコードを参考までに共有します...

Nginx 仮想ホストの詳細な分析

目次1. 仮想ホスト1.1 仮想ホストの概念1.2 仮想ホストタイプ2. IP仮想ホストに基づく2....

HTMLハイパーリンクaタグのhrefジャンプとonclick間の実行順序の例

HTMLハイパーリンクaタグのhrefジャンプとonclickの実行関係htmlのaタグのhrefは...

CSS パフォーマンスの最適化 - will-change の使用方法の詳細な説明

will-change は、要素にどのような変更が行われるかをブラウザに伝え、ブラウザが事前に最適化...

Mysql 8.0 のインストールとパスワードのリセットの問題

Mysql 8.0 のインストールの問題とパスワードのリセット1: MySqlをダウンロードする公式...