LocalResponseCache GatewayFilter ファクトリ

このフィルターを使用すると、レスポンスの本文とヘッダーをキャッシュして、次の規則に従うことができます。

  • 本文のない GET リクエストのみをキャッシュできます。

  • HTTP 200 (OK)、HTTP 206 (部分的なコンテンツ)、または HTTP 301 (完全削除) のいずれかのステータスコードのレスポンスのみをキャッシュします。

  • Cache-Control ヘッダーで許可されていない場合 (リクエストに no-store が存在するか、レスポンスに no-store または private が存在する場合)、レスポンスデータはキャッシュされません。

  • レスポンスがすでにキャッシュされていて、Cache-Control ヘッダーに no-cache 値を指定して新しいリクエストが実行された場合、304 (変更なし) で本文のないレスポンスが返されます。

このフィルターは、ルートごとにローカルレスポンスキャッシュを構成し、spring.cloud.gateway.filter.local-response-cache.enabled プロパティが有効になっている場合にのみ使用できます。また、グローバルに構成されたローカルレスポンスキャッシュも機能として利用できます。

キャッシュエントリの有効期限をオーバーライドする最初のパラメーター (秒は s、分は m、時間は h で表される) と、このルートのエントリを削除するキャッシュの最大サイズを設定する 2 番目のパラメーター (KBMBGB)。

次のリストは、ローカルレスポンスキャッシュ GatewayFilter を追加する方法を示しています。

@Bean
public RouteLocator routes(RouteLocatorBuilder builder) {
    return builder.routes()
        .route("rewrite_response_upper", r -> r.host("*.rewriteresponseupper.org")
            .filters(f -> f.prefixPath("/httpbin")
        		.localResponseCache(Duration.ofMinutes(30), "500MB")
            ).uri(uri))
        .build();
}

またはこれ

application.yaml
spring:
  cloud:
    gateway:
      routes:
      - id: resource
        uri: http://localhost:9000
        predicates:
        - Path=/resource
        filters:
        - LocalResponseCache=30m,500MB
このフィルターは、HTTP Cache-Control ヘッダーの max-age 値も自動的に計算します。元のレスポンスに max-age が存在する場合のみ、timeToLive 構成パラメーターで設定された秒数で値が書き換えられます。連続した呼び出しでは、この値は、レスポンスが期限切れになるまでの残りの秒数で再計算されます。
この機能を有効にするには、プロジェクトの依存関係として com.github.ben-manes.caffeine:caffeine と spring-boot-starter-cache を追加します。
プロジェクトでカスタム CacheManager Bean を作成する場合は、@Primary でマークするか、@Qualifier を使用して注入する必要があります。