ホームページ  >  記事  >  バックエンド開発  >  php header() は、リクエストされたページのブラウザキャッシュを制御します。

php header() は、リクエストされたページのブラウザキャッシュを制御します。

WBOY
WBOYオリジナル
2016-06-20 13:03:48906ブラウズ

キャッシュの主な機能は、ユーザーが Web サイトのページを頻繁に更新することを防ぐことであり、これによりサーバーのデータベースに負担がかかります。情報更新の適時性を確保し、キャッシュを最大限に活用できるようにする必要があります。

http プロトコルには、ブラウザーのキャッシュを制御する 3 つのヘッダーがあります: Cache-Control、Expires、および Last-Modified。PHP でリクエストされたページを制御するブラウザーのキャッシュは、主に header() を使用して設定されます。 PHPの機能です。

これら 3 つの http プロトコルで制御されるキャッシュ ヘッダーの意味と、php を使用してこれら 3 つのヘッダーを設定する方法について学びましょう。

(1) キャッシュ制御: キャッシュ制御。リクエストと応答が続くキャッシュ メカニズムを指定します。要求メッセージまたは応答メッセージで 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 メッセージの値を指定すると、クライアントは指定されたタイムアウト期間の値を超える応答メッセージを受信する可能性があります。注: Cache-Control ヘッダーは HTTP 1.1 で追加され、他のメソッドよりも詳細なキャッシュ制御を実現できます。

php は、Cache_Control ヘッダーのサンプル コードを次のように設定します:

header('Cache-Control: max-age=3600*24');//1 日間キャッシュし、最大値を示します。有効期間は 1 日ですが、1 日を超える場合、ブラウザはサーバーにアクセスして再読み取りする必要があります。この時間は、ユーザーが初めてページを読んだときから始まります

(2) 有効期限:キャッシュ有効期限の絶対時間 (グリニッジ標準時間))。指定された時間が経過すると、ブラウザはキャッシュを認識せず、サーバーにアクセスして最新のキャッシュを再度要求します。 PHP で Expires ヘッダーを設定するサンプル コードは次のとおりです。 header('Expires: Mon, 29 Jan 2007 08:56:01 GMT'); // ここでは有効期限を取得するために使用されていることに注意してください。グリニッジ標準時関数 gmdate を使用できます。具体的な使用方法については、関連ドキュメントを参照してください。

(3) Last-Modified: ドキュメントの最終変更時刻。

その使用法は次のとおりです:

1: 静的ファイルの場合、クライアントはキャッシュ内の時刻を送信し、変更がないことが判明した場合、Apache はそれを比較します。ヘッダーを直接返します。ステータス コードは 304 で、バイト数は非常に小さいです。

2: PHP 動的ファイルの場合、クライアントは比較時間を送信し、変更するかどうかを PHP が判断します。なぜなら、変更時間が同じ場合は 1024 バイトだけが返されます。 1024 が返される場合は不明です。PHP によって生成されたファイルが非常に大きく、1024 のみが返されるため、クライアントはサーバーから送信された変更時間に基づいてキャッシュからファイルを自動的に表示します。注: Last-Modified ヘッダーが設定されていない場合、Cache-Control と Expires のみが設定されている場合でも機能しますが、各リクエストは 1024php ではなく、実際のファイル バイト数を返す必要があります。 Last-Modified ヘッダーを設定するためのサンプル コード。ヘッダーは次のとおりです:

header('Last-Modified: '.gmdate('D, d M Y 01:01:01',$time).' GMT'); // グリニッジ時間が使用されます。 $time は、ファイルが追加されたときのタイムスタンプの下に、php を通じてリクエスト ページのブラウザ キャッシュを制御する完全な例を示します:

<p><?php</p>echo '这是一个缓存测试!';<br />$time=time();<br />$interval=3600*12;//12小时<br />header('Last-Modified: '.gmdate('r',$time));<br />header('Expires: '.gmdate('r',($time+$interval)));<br /><p>header('Cache-Control: max-age='.$interval);</p>

更新、移動 強制更新の違い ブラウザによっては、ctrl+F5 によるページの強制更新がサポートされています。

残念ながら、このことを知っている人はあまり多くありません。実際、これら 3 つのアクションは、上記の 3 つのヘッダーによって説明できます。移動: ユーザーはリンクをクリックして移動します。Last-Modified がある場合は、パケット キャプチャ ツールを使用して、送信されたバイトが 0 バイトであることを確認できます。キャッシュの有効期限が切れると、F5 キーを押して更新アクションを実行します。更新 (F5): この更新も、キャッシュに Last-Modified があるかどうかに基づいて決定され、最終更新時刻がない場合は 304 または 1024 (php) に転送されます。サーバーから送信されると、実際のドキュメント サイズが返されます。強制更新 (ctrl+F5): キャッシュ メカニズムを完全に放棄し、サーバーにアクセスして最新のドキュメントを読み取り、次のようなヘッダーをサーバーに送信します: Cache-Control: キャッシュなし命令。


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