web-dev-qa-db-ja.com

キャッシュリダイレクトをオフにするにはどうすればよいですか?

通常は特定のページにリダイレクトするURLがありますが、これより前にいくつかのコードが実行されます。 RedirectResponseインスタンスを返していますが、キャッシュされているようです。これをキャッシュしないようにするにはどうすればよいですか?

6
Mokugo

RedirectReponseクラスから作成された応答はキャッシュされません。したがって、キャッシュメタデータを設定する必要はありません。ここでの問題は、おそらく匿名リクエストのページキャッシュであり、リダイレクトが可能であるかどうかに関係なく、すべての応答がキャッシュに入れられるかどうかに関係なくキャッシュされます。

このキャッシュを無効にするには、応答を返す前にkillスイッチを使用します。

\Drupal::service('page_cache_kill_switch')->trigger();

Internal Page Cacheのみが無効になります。プロキシやブラウザキャッシュなどのdrupalの外部のキャッシュを制御するには、/admin/config/development/performanceに移動して、[ページキャッシュの最大経過時間]を設定します。

16
4k4

上記のコメントで述べたように、RedirectResponseSubscriberはリダイレクトを変更します。関連するスニペットは次のとおりです。

_if (!($response instanceof SecuredRedirectResponse)) {
    try {
      // SecuredRedirectResponse is an abstract class that requires a
      // concrete implementation. Default to LocalRedirectResponse, which
      // considers only redirects to within the same site as safe.
      $safe_response = LocalRedirectResponse::createFromRedirectResponse($response);
      $safe_response->setRequestContext($this->requestContext);
    }
_

したがって、キャッシュしてはならないカスタムリダイレクトがある場合は、SecuredRedirectResponseを拡張するカスタムクラスを作成し、必要なisSafe()メソッドを実装します。 LocalAwareRedirectResponseTraitを利用して、URLがローカルであることを確認し、これがリダイレクトであり、誤用ではないことを確認する他のチェックを併用することもできます。リダイレクトは上記のブロックをスキップし、キャッシュ可能なリダイレクトに変換されません。私を正しい方向に向けてくれた@ smartsheet-engに感謝します。

1
FatherShawn

Cacheable RedirectResponse で応答をキャッシュしたい場合があります

0
mpp