静的ページ用の Etag もあります。
1. 最初のケースを見てみましょう: Apache 静的ページ
Apache によってクライアントに送信される静的ページには、通常、Last-Modified タグと Etag が含まれており、これら 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: リクエストと応答が続くキャッシュ メカニズムを指定します。要求メッセージまたは応答メッセージで 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 秒を超える場合、ブラウザはこれを再度読み取る必要があることを意味します。 Expires はユーザーの読み取りページから開始する絶対時間です。
Expires: キャッシュの有効期限が切れる絶対時間。指定された時点を過ぎると、ブラウザはキャッシュを認識せず、サーバーにアクセスして最新のキャッシュを再度リクエストします。
Last-Modified: ドキュメントの最終変更時刻。その素晴らしい機能は次のとおりです: 1. 静的ファイルの場合、クライアントはキャッシュ内の時刻を送信し、存在することが判明すると、Apache がそれを比較します。変更なし、ヘッダーを直接返します。ステータス コードは 304 で、バイト数は非常に小さいです (上級バージョンでは、ファイルが変更されたかどうかを判断するための比較 Etag も追加されます)
2 PHP 動的ファイル:
クライアントが比較時間を送信すると、PHP は変更されたかどうかを判断します。変更時間が同じであれば、1024 バイトのみが返されます。なぜ 1024 バイトが返されるのかは不明です。非常に大きい場合は 1024 のみを返すため、クライアントはサーバーから送信された変更時刻に基づいて自動的に応答し、キャッシュ ファイルから表示されます。
注: Last-Modified ヘッダーがない場合、Cache-Control と Expires も機能しますが、各リクエストは 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 やフォーラム プログラムと同様に、この種のページは比較的早く更新されます。キャッシュの主な機能は、ユーザーがリストを頻繁に更新することを防ぐことであり、サーバー データベースに負担がかかることを保証する必要があります。更新の適時性とキャッシュのパフォーマンスが悪用されています
これは通常、Cache-Control によって制御され、フォーラムへの投稿の頻度に応じて最大有効期間を柔軟に制御できます。
PHP コード
コードをコピー コードは次のとおりです:
header('Cache-Control: max-age=60');//1 分間キャッシュします
header('Last-Modified: ' .gmdate(' D, d M Y 01:01:01',$time).'GMT');//グリニッジ時間、$time は投稿の最終更新タイムスタンプです
追加の 5 つ
1 リフレッシュの違い、go to、および強制更新
ブラウザーには、ctrl+F5 によるページの強制更新をサポートするボタンがあります。これらの違いは何ですか?
移動: ユーザーはリンクをクリックして移動します。Last-Modified がある場合は、パケット キャプチャ ツールを使用して、送信されたバイトを確認できます。キャッシュの有効期限が切れると、F5 リフレッシュ アクションが実行されます。
更新 (F5): この更新も、キャッシュに Last-Modified があるかどうかに基づいて決定され、存在する場合は 304 または 1024 (php) に転送されます。
強制更新: キャッシュメカニズムを完全に放棄し、サーバーにアクセスして最新のドキュメントを読み取り、次のようにヘッダーをサーバーに送信します
XML/HTML コード
コード コードは次のとおりです:
キャッシュ制御: キャッシュなし
2 デバッグ ツール
ブラウザとサーバー間の対話を表示するためのより良いツールは、httpwatch pro です。現在のバージョンは 4.1 で、サポートされています。 ie7。
分析や http デバッグができるプロキシ パケット キャプチャ ツールは他にもあります。これまで使用したことはありませんでしたが、2000 に付属のネットワークである tcp パケット キャプチャ ツールもあります。 2000 に付属のネットワーク モニタは http 専用ではありませんが、使い方が難しいです。
以上、apache struts2 Apache 環境における HTTP キャッシュプロトコルを利用した PHP の原理解析と応用解析を紹介しました。apache struts2 の内容も含めて、PHP チュートリアルに興味のある友人の参考になれば幸いです。