ホームページ >バックエンド開発 >PHPチュートリアル >PHP は Apache 環境で HTTP キャッシュ プロトコルの原理分析とアプリケーション分析を使用します_PHP チュートリアル

PHP は Apache 環境で HTTP キャッシュ プロトコルの原理分析とアプリケーション分析を使用します_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-21 15:40:441011ブラウズ

静的ページ用の Etag もあります。

1. 最初のケースを見てみましょう: apache 静的ページ

Apache によってクライアントに送信される静的ページには、通常、Last-Modified タグと Etag が含まれており、これら 2 つのタグの値は、変更時刻と i ノードから取得されます。静的ファイルの。

以下は、Apache からインターセプトされてクライアントに返されるヘッダー

XML/HTML コードです
​​

コードをコピーします コードは次のとおりです:

最終更新日: Fri, 26 Jan 2007 01:53:34 GMT
ETag: " 3f9f640-318-cb9f8380"

検索エンジンが静的ファイルを好む理由は、これら 2 つの識別子により、ファイルが更新されたかどうかを判断できるためです

2 つ目は、PHP とその他の動的ページ

PHP は動的に生成されるため、PHP プログラムの時間に基づいてコンテンツを決定することができません。そのため、PHP は、クライアントに返すときにキャッシュ制御を含めません。キャッシュを使用すると、キャッシュのメカニズムを理解する必要があり、b と s の間の相互作用が減少し、帯域幅が減少し、サーバーの負荷が軽減されます...多くの利点があります。

3. キャッシュ制御の具体的な意味

まず、私がテストして理解したこれらのタグの意味を説明します

Cache-Control: リクエストと応答が続くキャッシュ メカニズムを指定します。要求メッセージまたは応答メッセージで Cache-Control を設定しても、別のメッセージの処理中のキャッシュ プロセスは変更されません。リクエスト中のキャッシュ命令には、no-cache、no-store、max-age、max-stale、min-fresh、only-if-cached が含まれ、応答メッセージ内の命令には、public、private、no-cache、no が含まれます。 -store、no-transform、must-revalidate、proxy-revalidate、max-age。

各メッセージの指示の意味は次のとおりです:

Public は、応答を任意のキャッシュ領域にキャッシュできることを示します。

プライベートは、単一ユーザーの応答メッセージの全部または一部を共有キャッシュで処理できないことを示します。これにより、サーバーは、他のユーザーのリクエストには無効なユーザーからの部分的な応答のみを記述することができます。

no-cache は、リクエストまたは応答メッセージをキャッシュできないことを示します。

no-store は、重要な情報が意図せずに公開されるのを防ぐために使用されます。リクエスト メッセージで送信すると、リクエスト メッセージと応答メッセージの両方でキャッシュが使用されます。

max-age は、クライアントが指定された時間 (秒) を超えない存続期間を持つ応答を受信できることを示します。

min-fresh は、クライアントが現在の時間に指定された時間を加えた時間よりも短い応答時間で応答を受信できることを示します。

max-stale は、クライアントがタイムアウト期間を超えて応答メッセージを受信できることを示します。 max-stale メッセージの値を指定すると、クライアントはタイムアウト期間の指定された値を超える応答メッセージを受信する可能性があります。

phpの使用法:

出力前にheader()を使用します(ob_start()を使用する場合、ヘッダーをプログラム内のどこにでも配置できます)

PHPコード
コードをコピーします コードは次のとおりです:

header( 'Cache-Control: max-age=8');

max-age=8 は、最大有効期間が 8 秒であることを意味します。8 秒を超える場合、ブラウザはサーバーにアクセスして読み取る必要があります。この時間はユーザーの読み取りページから始まりますが、Expires は絶対時間です。

Expires: キャッシュの有効期限が切れる絶対時間。指定された時点を過ぎると、ブラウザはキャッシュを認識せず、サーバーにアクセスして最新のキャッシュを再度リクエストします。

Last-Modified: ドキュメントの最終変更時刻。その素晴らしい用途は次のとおりです。 1

静的ファイルの場合、クライアントはキャッシュ内の時刻を送信し、そこにあることが判明すると、Apache がそれを比較します。は変更はなく、ヘッダーを直接返します。ステータス コードは 304 で、バイト数は非常に小さいです (上級バージョンでは、ファイルが変更されたかどうかを判断するための比較 Etag も追加されます)

2 php 動的ファイル:

クライアントは比較時間を送信し、変更されたかどうかをphpが判断します。なぜ1024バイトが返されるかは不明です。あなたのphpは非常に大きいので、1024のみを返すため、クライアントはサーバーに応じて変更時間を自動的に表示します。

注: Last-Modified ヘッダーがない場合、Cache-Control と Expires も機能しますが、各リクエストは 1024

4 ではなく、実際のファイル バイト数を返す必要があります。どうですか?

静的ページ ドン'心配する必要はありません。静的ページのキャッシュをより適切に制御したい場合、Apache には適切に制御できるモジュールがいくつかあります。

2 つのタイプがあります:

1.このタイプのページの特徴は、最初のリリース後にいくつかの変更があり、時間が経っても基本的に変更されないことです。制御戦略は次のとおりです。 1. 最初のリリースに対して Last-Modified を送信し、max-age を 1 日に設定し、変更後に Last-Modified を更新します。max-age 時間は変更の数に応じて通常になります。これはさらに面倒に思えますが、次に変更される可能性のある時刻を予測し、Expires を使用して有効期限が切れるおおよその時刻を指定することもできます。

コードをコピーします

。は次のとおりです:

//header('Cache-Control: max-age=86400');// 1 日分のキャッシュ
header('Expires: Mon, 29 Jan 2007 08:56:01 GMT');// 有効期限を指定する
header ('Last-Modified: '.gmdate('D, d M Y 01:01:01',$time).'GMT');//グリニッジ時間、$time はファイル追加時のタイムスタンプです

2 頻繁に変更されるページ

は、BBS やフォーラム プログラムと似ており、キャッシュの主な機能は、ユーザーが頻繁にリストを更新することを防ぐことであり、サーバー データベースに負担がかかります。更新の適時性を確保し、キャッシュを確実に利用できるようにするために必要です。

ここでは一般に Cache-Control を使用して制御し、max-age はフォーラムへの投稿頻度に応じて柔軟に制御できます。

PHPコード
コードをコピー コードは次のとおりです:

header('Cache-Control: max-age=60');//1分間キャッシュします
header('Last-Modified: '.gmdate( 'D, d M Y 01:01:01',$time).'GMT');//グリニッジ時間、$time は投稿の最終更新タイムスタンプです

さらに 5 つ

1更新、移動、強制更新の違い

一部のブラウザでは、Ctrl+F5 によるページの強制更新がサポートされています。

Go to: ユーザーがリンクをクリックすると、そのリンクに移動します。Last-Modified がある場合は、サーバーと通信しません。パケット キャプチャ ツールを使用して確認できます。送信されたバイトが 0 バイトであることを確認します。キャッシュの有効期限が切れると、F5 リフレッシュ アクションが実行されます。

更新 (F5): この更新も、キャッシュに Last-Modified があるかどうかに基づいて決定され、最終更新時刻がない場合は 304 または 1024 (php) に転送されます。サーバーに送信して実際のドキュメント サイズを読み取って返します

強制更新: キャッシュ メカニズムを完全に放棄し、サーバーにアクセスして最新のドキュメントを読み取り、次のようにヘッダーをサーバーに送信します

XML/HTML コード
コードをコピーします コードは次のとおりです:

キャッシュ制御: キャッシュなし

2 デバッグツール

ブラウザとサーバー間の対話を表示するためのより良いツールは、httpwatch pro (現在のバージョン) です。 4.1、IE7 をサポート

分析できる他のプロキシ パケット キャプチャ ツール、http デバッグがあります。これまで使用したことはありませんでしたが、2000 に付属のネットワークである tcp パケット キャプチャ ツールもあります。 2000 に付属のネットワーク モニタは http 専用ではありませんが、使い方が難しいです。

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/321283.html技術記事静的ページ用の Etag もあります。 1. 最初の状況を見てみましょう: Apache の静的ページ。Apache によってクライアントに送信される静的ページには、通常、Last-Modified タグと Etag が含まれています。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。