目次
キャッシュ有効期限値
last-modified と Etag の違いについて
実際の応用
ホームページ ウェブフロントエンド H5 チュートリアル 知っておくべきHTTPキャッシュメカニズム(詳細なコード説明)

知っておくべきHTTPキャッシュメカニズム(詳細なコード説明)

Aug 24, 2021 am 11:39 AM
h5 http フロントエンド

前回の記事「vueのルーティング切り替えの白画面問題の詳細分析(コード付き)」では、vueのルーティング切り替えの白画面問題について学びました。 HTTP キャッシュの仕組みについては、次の記事で詳しく解説していますので、参考になると思いますので、困っている方は参考にしていただければ幸いです。

知っておくべきHTTPキャッシュメカニズム(詳細なコード説明)

Web キャッシュはデータベース キャッシュ、サーバー側キャッシュ (プロキシ サーバー キャッシュ、CDN) に大別できます。キャッシュ)、ブラウザのキャッシュ。

ブラウザ キャッシュには、

HTTP キャッシュ、indexDBcookielocalstorage などの多くのコンテンツも含まれています。 。 ここで話したいのは、httpキャッシュについてです。

キャッシュを使用する利点

  • 冗長なデータ送信を削減します

  • ネットワークのボトルネックを軽減します

  • 元のサーバーの要件を削減しました

  • 距離による遅延を削減しました

  • #用語

キャッシュ ヒットrate

: すべてのリクエストの数に対する、キャッシュからデータを取得するリクエストの数の比率。理想的には、高ければ高いほど良いです。

期限切れコンテンツ

: 設定された有効期限を超え、「古い」とマークされているコンテンツ。通常、期限切れのコンテンツを使用してクライアントのリクエストに応答することはできず、新しいコンテンツをオリジンサーバーに再度リクエストするか、キャッシュされたコンテンツがまだ準備ができていることを確認する必要があります。

検証

: キャッシュ内の期限切れのコンテンツがまだ有効であるかどうかを確認し、検証に合格した場合は、有効期限を更新します。

無効化

: 無効化とは、キャッシュからコンテンツを削除することです。コンテンツが変更された場合は、無効なコンテンツを削除する必要があります。 メカニズム


知っておくべきHTTPキャッシュメカニズム(詳細なコード説明)戦略

1) キャッシュストレージ戦略

キャッシュストレージ ポリシーは、クライアントが

http

response を保存する必要があるかどうかを決定します。キャッシュ ストレージに関連する http ヘッダー は、主に response ヘッダー Cache-Control です。 header には、次の対応する値があります: PublicPrivateno-cachemax-age無店舗no-store を除く他のものは、response がクライアントによってキャッシュされる必要があることを示します。

#コマンド説明##パブリックすべてのコンテンツ すべてキャッシュされます (クライアントとプロキシ サーバーの両方がキャッシュできます)コンテンツはプライベート キャッシュにのみキャッシュされます (クライアントのみがキャッシュできます)。プロキシ サーバーではありません) Cache)キャッシュされたコンテンツは xxx 秒後に期限切れになります。期限切れになる前に、次のことができます。ローカル キャッシュを直接使用します。有効期限が切れたら、サーバーをチェックして、リソースが変更されたかどうかを確認する必要があります。 クライアント側ではまったくキャッシュされません max-age=0 の場合、応答はクライアントにキャッシュされますが、それ以降は毎回、リソースが変更されたかどうかをサーバーに確認します #

Cache-Control: Public 設定を通じて、HTTP 応答データをローカルに保存できますが、これは後続のブラウザがキャッシュからデータを直接読み取ることを意味するものではありません。使用します。ローカルにキャッシュされたデータが利用可能かどうかを判断できないため (有効期限が切れている可能性があります)、キャッシュ有効期限ポリシーによって判断する必要があります

2) キャッシュ有効期限ポリシー

キャッシュ有効期限ポリシーは、クライアントによってローカルに保存されたキャッシュ データの有効期限が切れているかどうかを決定します。有効期限が切れていない場合は、ローカルに保存されたデータを直接使用できます。それ以外の場合は、リクエストをサーバーに送信して試行する必要があります。データを再取得します。キャッシュ有効期限ポリシーに関連する http ヘッダーは Expires です。

Expires は、キャッシュされたデータが有効である絶対時間を示し、この時点を過ぎるとローカル キャッシュが無効になることをクライアントに伝えます。この間、クライアントはキャッシュから直接キャッシュできます。サーバーに要求せずにローカル キャッシュに保存されている結果を使用します。

:no-cache と max-age=xxxExpires よりも優先されることに注意してください。これらが同時に存在する場合、後者の方が優先されます。カバーしてください。次に、キャッシュ データの有効期限が切れると、ローカル キャッシュから直接キャッシュを読み取ることができなくなり、確認のために別のリクエストをサーバーに送信する必要があることがクライアントに通知されるだけです。ローカルに保存されたデータを継続して使用できる特定の状況は、キャッシュ比較戦略によって異なります。

3) キャッシュ比較戦略

クライアントにキャッシュされたデータ識別子をサーバーに送信します。サーバーはその識別子を使用して、クライアントのキャッシュされたデータがまだ有効であるかどうかを判断します。を選択し、データを再送信するかどうかを決定します。クライアントは、データの有効期限が切れたかブラウザが更新されたことを検出すると、サーバーへの http リクエストを再開始します。サーバーはこの時点ではデータを返すことを望んでいませんが、リクエスト ヘッダーに識別子があるかどうかを確認します。 (If-Modified-Since, If -None-Match)、判定フラグがまだ有効な場合は、304 を返し、ローカルにキャッシュされたデータをフェッチして使用するようにクライアントに指示します (ここで、対応するヘッダー情報 (Last-Modified、ETags) をクライアントへの最初の応答に出力する必要があることに注意してください。ローカルにキャッシュされたデータの有効期限が切れたとみなされる場合でも、データがもう役に立たないという意味ではありません。

キャッシュ有効期限値

ストレージ ポリシーでは、応答がない場合、no-cachemax-age=0 と同等です。サーバーから返された応答 max-ageno-cache、または Expires を指定すると、クライアントは http 応答 をキャッシュしますか? FiddlerCharles などのパケット キャプチャ ツールを使用すると、クライアントが応答内の

Date## を値とする

もキャッシュすることがわかります。 # と Last-Modified の差の 10% がキャッシュ有効期間

として使用され、

Caching パネルで確認できます。 Fiddler

HTTP/1.1 Cache-Control Header is present: private
HTTP Last-Modified Header is present: Tue, 08 Nov 2016 06:59:00 GMT
No explicit HTTP Cache Lifetime information was provided.
Heuristic expiration policies suggest defaulting to: 10% of the delta between Last-Modified and Date.
That's '05:15:02' so this response will heuristically expire 2016/11/11 0:46:01.
ログイン後にコピー

絵を使って表現


知っておくべきHTTPキャッシュメカニズム(詳細なコード説明)

キャッシュ制御

1) 強制キャッシュ

は、

ExpiresCache-ControlExpires を通じて設定できます。 Expires はキャッシュの有効期限を指し、この時間を超える場合は、つまり、リソースの有効期限が切れたことを意味します。問題の 1 つは、特定の時刻を使用するため、時刻が正しく表現されなかったり、正しいタイム ゾーンに変換されなかったりすると、キャッシュのライフ サイクルにエラーが発生する可能性があることです。 そして、ExpiresHTTP/1.0 の標準ですが、現在では HTTP/1.1 で定義されている Cache-Control を使用する傾向が強くなっています。両方が同時に存在する場合、Cache-Control

の優先順位が高くなります。

2) キャッシュのネゴシエート

キャッシュされたリソースの有効期限が切れても、リソースの内容が変更されたわけではありません。サーバー上のリソースと差異がない場合は、実際、再度リクエストする必要はありません。クライアントとサーバーは、現在要求されているリソースがキャッシュを使用できるかどうかを、何らかの検証メカニズムを通じて検証します。ブラウザーは初めてデータを要求した後、データと応答ヘッダーのキャッシュ識別子を保存します。再度リクエストすると、保存されているヘッダー フィールドが取得され、サーバーはそれが使用可能かどうかを確認します。 304 Not Modified が返された場合、リソースが変更されていないため、キャッシュされたデータを使用して新しい有効期限を取得できることを意味します。逆に、200

を返すことは、リソースを再度リクエストして古いリソースを置き換えることと同じです。

Last-modified/If-Modified-since

Last-modified: サーバー側リソース、応答の最終変更時刻ヘッダーにはこのロゴが含まれます。最初のリクエストの後、ブラウザはこの時間を記録します。再度リクエストすると、リクエスト ヘッダーには以前に記録された時間である If-Modified-Since が含まれます。 If-Modified-Since を含むリクエストを受信した後、サーバーはそれをリソースの最終変更時刻と比較します。変更されている場合は最新のリソースがステータスコード 200 で返され、変更されていない場合は 304

が返されます。

知っておくべきHTTPキャッシュメカニズム(詳細なコード説明)

タグ付け/一致しない場合

###サーバーによって生成された

A hash 文字列。応答ヘッダーには、最初のリクエストには ETag: abcd が含まれ、後続のリクエストには If- が含まれます。None-Match: abcd の場合、サーバーは ETag をチェックし、304 または 200 を返します。

last-modified と Etag の違いについて

  • サーバーによってはリソースの最終変更時刻を正確に取得できないため、リソースが更新されたかどうかを判断することができません。最終変更時刻に基づいて更新されました。

  • Last-modified は秒単位までしか正確ではありません。

  • 一部のリソースの最終変更時刻は変更されましたが、内容は変更されていません。Last-modified を使用しても、内容が変更されていないことは示されません。

  • Etag の精度は Last-modified の精度よりも高く、強力な検証であり、一貫したリソース バイト レベルと高い値が必要です。優先度。サーバーが ETag を提供する場合、最初に ETag に対する 条件付きリクエスト を実行する必要があります。

注: ETag/Last-modified を実際に使用する場合は、負荷分散やリバース プロキシを実行するときに不整合が発生する可能性があるため、一貫性の維持に注意してください。 ETag の計算にもリソースが必要です。変更がそれほど頻繁ではない場合は、Cache-Control を使用してニーズを満たすことができるかどうかを確認してください。

実際の応用

まず、どのコンテンツがキャッシュに適しているのか、どのコンテンツがキャッシュに適していないのかを明確にする必要があります。

キャッシュされたコンテンツを検討します: css スタイル ファイル、js ファイル、ロゴ、アイコン、html ファイル。一部のダウンロードされたコンテンツはキャッシュすべきではありません: ビジネスに依存した GET リクエスト

キャッシュ可能なコンテンツはいくつかの異なる状況に分類されます:

頻繁に変更されないファイル: tomax-ageより大きな値を設定します。通常は max-age=31536000 を設定します。たとえば、導入およびパッケージ化された一部のサードパーティ ファイルには、hash サフィックスcss, が付いています。 js ファイル。一般に、ファイルの内容が変更されると、バージョン番号と hash 値が更新されます。これは、別のファイルをリクエストするのと同じです。標準では、max-age の値は 1 年を超えることができないと規定されているため、max-age=31536000 に設定されます。期限切れのコンテンツについては、一定期間使用されなかったファイルはキャッシュ領域から削除されます。

[終了]

推奨学習: HTML5 ビデオ チュートリアル

プライベート
max-age = xxx (xxx は数値)
no-store
no-cache

以上が知っておくべきHTTPキャッシュメカニズム(詳細なコード説明)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

PHP と Vue: フロントエンド開発ツールの完璧な組み合わせ PHP と Vue: フロントエンド開発ツールの完璧な組み合わせ Mar 16, 2024 pm 12:09 PM

PHP と Vue: フロントエンド開発ツールの完璧な組み合わせ 今日のインターネットの急速な発展の時代において、フロントエンド開発はますます重要になっています。 Web サイトやアプリケーションのエクスペリエンスに対するユーザーの要求がますます高まっているため、フロントエンド開発者は、より効率的で柔軟なツールを使用して、応答性の高いインタラクティブなインターフェイスを作成する必要があります。フロントエンド開発の分野における 2 つの重要なテクノロジーである PHP と Vue.js は、組み合わせることで完璧なツールと見なされます。この記事では、PHP と Vue の組み合わせと、読者がこれら 2 つをよりよく理解し、適用できるようにするための詳細なコード例について説明します。

Web ページのリダイレクトの一般的なアプリケーション シナリオを理解し、HTTP 301 ステータス コードを理解する Web ページのリダイレクトの一般的なアプリケーション シナリオを理解し、HTTP 301 ステータス コードを理解する Feb 18, 2024 pm 08:41 PM

HTTP 301 ステータス コードの意味を理解する: Web ページ リダイレクトの一般的なアプリケーション シナリオ インターネットの急速な発展に伴い、Web ページの操作に対する人々の要求はますます高くなっています。 Web デザインの分野では、Web ページのリダイレクトは一般的かつ重要なテクノロジであり、HTTP 301 ステータス コードによって実装されます。この記事では、HTTP 301 ステータス コードの意味と、Web ページ リダイレクトにおける一般的なアプリケーション シナリオについて説明します。 HTTP301 ステータス コードは、永続的なリダイレクト (PermanentRedirect) を指します。サーバーがクライアントのメッセージを受信すると、

フロントエンドの面接官からよく聞かれる質問 フロントエンドの面接官からよく聞かれる質問 Mar 19, 2024 pm 02:24 PM

フロントエンド開発のインタビューでは、HTML/CSS の基本、JavaScript の基本、フレームワークとライブラリ、プロジェクトの経験、アルゴリズムとデータ構造、パフォーマンスの最適化、クロスドメイン リクエスト、フロントエンド エンジニアリング、デザインパターン、新しいテクノロジーとトレンド。面接官の質問は、候補者の技術スキル、プロジェクトの経験、業界のトレンドの理解を評価するように設計されています。したがって、候補者はこれらの分野で自分の能力と専門知識を証明するために十分な準備をしておく必要があります。

Django はフロントエンドですか、バックエンドですか?それをチェックしてください! Django はフロントエンドですか、バックエンドですか?それをチェックしてください! Jan 19, 2024 am 08:37 AM

Django は、迅速な開発とクリーンなメソッドを重視した Python で書かれた Web アプリケーション フレームワークです。 Django は Web フレームワークですが、Django がフロントエンドなのかバックエンドなのかという質問に答えるには、フロントエンドとバックエンドの概念を深く理解する必要があります。フロントエンドはユーザーが直接対話するインターフェイスを指し、バックエンドはサーバー側プログラムを指し、HTTP プロトコルを通じてデータと対話します。フロントエンドとバックエンドが分離されている場合、フロントエンドとバックエンドのプログラムをそれぞれ独立して開発して、ビジネス ロジックとインタラクティブ効果、およびデータ交換を実装できます。

Go 言語のフロントエンド テクノロジーの探求: フロントエンド開発の新しいビジョン Go 言語のフロントエンド テクノロジーの探求: フロントエンド開発の新しいビジョン Mar 28, 2024 pm 01:06 PM

Go 言語は、高速で効率的なプログラミング言語として、バックエンド開発の分野で広く普及しています。ただし、Go 言語をフロントエンド開発と結びつける人はほとんどいません。実際、フロントエンド開発に Go 言語を使用すると、効率が向上するだけでなく、開発者に新たな視野をもたらすことができます。この記事では、フロントエンド開発に Go 言語を使用する可能性を探り、読者がこの分野をよりよく理解できるように具体的なコード例を示します。従来のフロントエンド開発では、ユーザー インターフェイスの構築に JavaScript、HTML、CSS がよく使用されます。

HTTP リクエストのタイムアウトに対してどのようなステータス コードが返されますか? HTTP リクエストのタイムアウトに対してどのようなステータス コードが返されますか? Feb 18, 2024 pm 01:58 PM

HTTP リクエストがタイムアウトになり、サーバーから 504GatewayTimeout ステータス コードが返されることがよくあります。このステータス コードは、サーバーがリクエストを実行しても、リクエストに必要なリソースを取得できないか、一定時間が経過してもリクエストの処理を完了できないことを示します。これは 5xx シリーズのステータス コードで、サーバーに一時的な問題または過負荷が発生し、その結果クライアントのリクエストを正しく処理できなくなったことを示します。 HTTP プロトコルでは、さまざまなステータス コードに特定の意味と用途があり、504 ステータス コードはリクエストのタイムアウトの問題を示すために使用されます。顧客の中で

C++ を使用して HTTP ストリーミングを実装するにはどうすればよいですか? C++ を使用して HTTP ストリーミングを実装するにはどうすればよいですか? May 31, 2024 am 11:06 AM

C++ で HTTP ストリーミングを実装するにはどうすればよいですか? Boost.Asio と asiohttps クライアント ライブラリを使用して、SSL ストリーム ソケットを作成します。サーバーに接続し、HTTP リクエストを送信します。 HTTP 応答ヘッダーを受信して​​出力します。 HTTP 応答本文を受信して​​出力します。

Django: フロントエンド開発とバックエンド開発の両方を処理できる魔法のフレームワークです。 Django: フロントエンド開発とバックエンド開発の両方を処理できる魔法のフレームワークです。 Jan 19, 2024 am 08:52 AM

Django: フロントエンド開発とバックエンド開発の両方を処理できる魔法のフレームワークです。 Django は、効率的でスケーラブルな Web アプリケーション フレームワークです。 MVCやMTVなど複数のWeb開発モデルをサポートし、高品質なWebアプリケーションを簡単に開発できます。 Django はバックエンド開発をサポートするだけでなく、フロントエンド インターフェイスを迅速に構築し、テンプレート言語を通じて柔軟なビュー表示を実現します。 Django はフロントエンド開発とバックエンド開発をシームレスに統合するため、開発者は学習に特化する必要がありません。

See all articles