ホームページ >php教程 >php手册 >PHP は Apache 環境で HTTP キャッシュ プロトコルの原理分析とアプリケーション分析を使用します

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

WBOY
WBOYオリジナル
2016-06-13 12:18:501044ブラウズ

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

1. 最初の状況を見てみましょう: Apache 静的ページ

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

以下は、Apache によってクライアントに返されるヘッダーのインターセプトです

XML/HTML コード

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


Last-Modified: Fri, 26 Jan 2007 01:53:34 GMT
ETag: "3f9f640-318-cb9f8380"


検索エンジンが静的ファイルを好む理由 この 2 つのロゴにより、ファイルが更新されたかどうかが判断できます

2. PHP などの動的ページ

PHP は動的に生成され、その内容は PHP プログラムの時間に基づいて決定されるため、デフォルトでは、クライアントに戻るときに PHP にはキャッシュ制御が含まれません。キャッシュを有効に活用したい場合は、 b と s を削減し、帯域幅トラフィックを削減し、サーバー負荷を軽減するには、キャッシュ メカニズムを理解し、インタラクションを管理する必要があります。メリットはたくさんあります。

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

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

キャッシュ制御: 指定しますリクエストとレスポンスが続くキャッシュ メカニズム。要求メッセージまたは応答メッセージで 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。

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

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

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

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 バイトのみが返されます。なぜ 1024 が返されるのかは不明ですが、PHP で生成されたファイルが非常に大きい場合は 1024 のみが返されるため、クライアントは送信された変更時刻に基づいてキャッシュ ファイルから自動的に表示します。サーバー。

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


4 ではなく、実際のファイル バイト数を返す必要があります。
静的ページのキャッシュをより適切に制御したい場合、Apache には適切に制御できるモジュールがいくつかありますが、ここでは説明しません

php ページ:

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

1. ニュースリリースと同様、頻繁に変更されないページ。最初のリリース後、何度か変更を加えても、基本的には時間が経っても修正されません。制御戦略は次のとおりです。 1. 最初のリリースに対して Last-Modified を送信し、max-age を 1 日に設定し、変更後に Last-Modified を更新します。max-age 時間は変更の数に応じて通常になります。これはさらに面倒に思えますが、変更の数を記録する必要があります。次に変更される可能性のある時刻を予測し、Expires を使用して

PHP コード

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


//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 やフォーラム プログラムに似ており、キャッシュの主な機能は、更新を高速化することです。ユーザーが頻繁にリストを更新してサーバーに負荷をかけることは避けられます。データベースへの負担は、更新の適時性を確保するだけでなく、キャッシュを確実に利用できるようにする必要があります。

これは通常、キャッシュ制御によって制御されます。 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): この更新も、キャッシュに最終更新日時があるかどうかに基づいて決定され、最終更新時刻がない場合は 304 または 1024 (php) に転送されます。サーバーにアクセスして読み取り、真の値を返します。 ドキュメント サイズ

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

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

キャッシュ制御: no-キャッシュ

2 つのデバッグ ツール

ブラウザーの表示とサーバー インタラクションのためのより優れたツールは httpwatch pro (現在のバージョン 4.1) で、ie7 をサポート

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

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