Web開発では、ページリダイレクトは、ユーザーをあるURLから別のURLに向けるために使用される一般的な手法です。一般的なシナリオには、正常にログインした後のユーザーのホームページへのリダイレクト、またはURLパスが変更されたときのリダイレクトが含まれます。
ただし、ページのリダイレクトプロセス中に、不必要なキャッシュされた応答ヘッダーが発生する可能性があります。これにより、ブラウザまたはプロキシサーバーが古いページデータをキャッシュし、ユーザーエクスペリエンスとページの読み込みパフォーマンスに影響を与える可能性があります。これを回避するために、PHPはheader_remove()関数を提供します。これにより、キャッシュ関連の応答ヘッダーを効果的にクリーニングできるため、ページの読み込みパフォーマンスが向上します。
header_remove()関数は、PHPの組み込み関数であり、現在の応答ヘッダーの指定されたヘッダー情報を削除するために使用されます。その基本的な構文は次のとおりです。
<span><span><span class="hljs-title function_ invoke__">header_remove</span></span><span>(</span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$name</span></span><span> = ?): </span><span><span class="hljs-keyword">bool</span></span><span>
</span></span>
$ name :オプションのパラメーター、削除する応答ヘッダーの名前を指定します。 $ nameが提供されていない場合、すべての応答ヘッダーが削除されます。
返品値:応答ヘッダーが正常に削除された場合はtrueを返します。応答ヘッダーが失敗した場合、 falseを返します。
キャッシュ応答ヘッダー(キャッシュコントロール、有効期限、プラグマなど)は、ブラウザがページをキャッシュできるかどうかを示します。ページをリダイレクトする場合、キャッシュ設定が誤っていると、古いリダイレクト情報がキャッシュされ、ユーザーは常に間違ったページに向けられたり、古いコンテンツを見たりします。
キャッシュ応答ヘッダーがクリーニングされていない場合、ブラウザはリダイレクトされたターゲットのページをキャッシュし、ユーザーが後でリクエストしたときにキャッシュされたデータを使用し続けることができます。このようにして、ページが読み込まれると、サーバーを再起動する代わりに、キャッシュからコンテンツを直接ロードして、ページが古いデータを表示し、パフォーマンスを低下させる可能性があります。
リダイレクト時にheader_remove()を使用してこれらの応答ヘッダーをクリアすることにより、ページの読み込みパフォーマンスを改善し、ブラウザがキャッシュを使用する代わりにターゲットページを再リケストするようにします。
リダイレクトでキャッシュをクリーニングする必要があるシナリオがあるとしたら、 header_remove()を使用してキャッシュ関連の応答ヘッダーを削除できます。簡単な例コードは次のとおりです。
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// すべてのキャッシュ関連の応答ヘッダーをクリアします</span></span><span>
</span><span><span class="hljs-title function_ invoke__">header_remove</span></span><span>(</span><span><span class="hljs-string">'Cache-Control'</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">header_remove</span></span><span>(</span><span><span class="hljs-string">'Expires'</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">header_remove</span></span><span>(</span><span><span class="hljs-string">'Pragma'</span></span><span>);
</span><span><span class="hljs-comment">// リダイレクトヘッダーのセットアップ</span></span><span>
</span><span><span class="hljs-title function_ invoke__">header</span></span><span>(</span><span><span class="hljs-string">'Location: https://www.example.com'</span></span><span>);
</span><span><span class="hljs-keyword">exit</span></span><span>;
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
このコードでは、一般的なキャッシュ制御ヘッダーであるheader_remove()を介して、キャッシュ制御、有効期限、およびプラグマ応答ヘッダーを削除します。次に、ページはHeader()関数を介してリダイレクトされます。
特定のキャッシュヘッダーのみを削除する場合は、削除する応答ヘッダーの名前を指定することもできます。
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// クリア Cache-Control そして Expires 応答ヘッダー</span></span><span>
</span><span><span class="hljs-title function_ invoke__">header_remove</span></span><span>(</span><span><span class="hljs-string">'Cache-Control'</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">header_remove</span></span><span>(</span><span><span class="hljs-string">'Expires'</span></span><span>);
</span><span><span class="hljs-comment">// 設定 301 永続的なリダイレクト</span></span><span>
</span><span><span class="hljs-title function_ invoke__">header</span></span><span>(</span><span><span class="hljs-string">'HTTP/1.1 301 Moved Permanently'</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">header</span></span><span>(</span><span><span class="hljs-string">'Location: https://www.example.com'</span></span><span>);
</span><span><span class="hljs-keyword">exit</span></span><span>;
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
この例では、キャッシュコントロールを削除してヘッダーの有効期限を取って、301永久リダイレクトステータスコードを設定します。これを行うと、ブラウザがリダイレクト後にページをキャッシュすることができなくなります。
すべての応答ヘッダーを削除すると不必要な副作用が発生する場合があります。キャッシュ応答ヘッダーをクリーニングしない場合、他のキャッシュに依存しない応答ヘッダーを削除すると、他の機能(コンテンツタイプ、コンテンツレングスなど)に影響する可能性があるため、キャッシュ関連の応答ヘッダーのみを削除することをお勧めします。
何かを出力する前にheader_remove()を呼び出すようにしてください: phpでは、スクリプトが出力(HTMLを含む)の前にheader_remove()を呼び出す必要があります。通常、スクリプトの先頭に設定します。
適切なキャッシングポリシーを使用する:キャッシュ関連のヘッダーのクリーニング中に、実際のニーズに応じて適切なキャッシュポリシーを設定します。重複するネットワーク要求を減らすために、特定のリソースの適切なキャッシュコントロールを設定する必要がある場合があります。
PHPでは、 header_remove()関数を使用してキャッシュ関連の応答ヘッダーをクリーニングすることにより、ページのリダイレクト中のキャッシュの問題を効果的に回避し、それによりページの読み込みパフォーマンスを改善できます。リダイレクトの場合、不必要なキャッシュレスポンスヘッダーをクリーンアップすると、ブラウザが古いキャッシュコンテンツを使用する代わりに、サーバーから最新のページをロードすることが保証されます。
実際の開発では、開発者はページのニーズに基づいてキャッシュされた応答ヘッダーを合理的にクリーニングし、ページリダイレクトの場合、パフォーマンスの問題やその他の潜在的なエラーを引き起こさないようにする必要があります。