Web開発では、ユーザーがアクセスするたびに最新のコンテンツを取得できるように、ブラウザまたはプロキシサーバーがページをキャッシュしないことを確認する必要がある場合があります。 PHPが提供するHeader()関数を使用して、HTTPヘッダーを送信してキャッシュ動作を制御できます。この記事では、キャッシュ()関数を使用してキャッシュコントロールとプラグマを設定する方法を詳細に紹介し、キャッシュを効果的に防止します。
ブラウザキャッシュはパフォーマンスを改善し、サーバーの圧力を下げるように設計されていますが、一部のシナリオ(動的データ、ユーザーの個人情報、機密操作ページなど)では、キャッシュからロードするのではなく、毎回サーバーから最新のコンテンツを強制的に取得する必要があります。
キャッシュ制御が正しく設定されていない場合、ユーザーは期限切れのページが表示され、一貫性のないデータまたはエラーが操作されます。
PHPのHeader()関数を使用すると、RAW HTTPヘッダー情報をブラウザに送信できます。これは、出力(Echo、Print、HTML)の前に呼び出される必要があります。
キャッシュコントロールは、 HTTP/1.1によって導入された重要なヘッダーであり、キャッシュポリシーの定義に使用されます。キャッシュを無効にするには、次のコマンドを使用できます。
ストアなし:キャッシュは許可されていません。
ノーキャッシュ:毎回リビューさせる必要があります。
必須の再評価:期限切れのリソースをサーバーに確認する必要があります。
サンプルコード:
<?php
// キャッシュを無効にします
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
?>
2番目のHeader()はここで呼び出します、誤ったパラメーターは、同じ名前の前のヘッダーを上書きせずに追加する必要があることを意味します。
Pragmaは、古いプロキシサーバーとの互換性のためのHTTP/1.0の古い方法です。
サンプルコード:
<?php
header("Pragma: no-cache");
?>
キャッシュコントロールは主に現在使用されていますが、互換性のためにプラグマを追加することをお勧めします。
キャッシュコントロールとプラグマに加えて、ヘッダーの有効期限を設定し、有効期限を過去の特定のポイントに設定し、コンテンツの有効期限を強制することもできます。
サンプルコード:
<?php
header("Expires: Thu, 01 Jan 1970 00:00:00 GMT");
?>
これが完全な防止防止例です。
<?php
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
header("Expires: Thu, 01 Jan 1970 00:00:00 GMT");
// 動的なコンテンツが出力されると仮定します
echo "<html><body>";
echo "<h1>現在の時刻: " . date('Y-m-d H:i:s') . "</h1>";
echo "<p>アクセス <a href=\"https://m66.net/demo\">m66.net サンプルページ</a></p>";
echo "</body></html>";
?>
出力を送信する前にheader()を呼び出す必要があります。そうしないと、「既に送信されたヘッダー」エラーがスローされます。
さまざまなブラウザとプロキシサーバーには、キャッシュ命令のサポートがわずかに異なります。保険の場合、キャッシュコントロール、プラグマ、および同時に期限切れになることをお勧めします。
キャッシュプラグインまたはCDNを使用する場合は、これらのレベルでアンチキャッシュポリシーを構成する必要もあります。