Skip to content
Server Plugin

キャッシングヘッダー

必須の依存関係: io.ktor:ktor-server-caching-headers

コード例: caching-headers

ネイティブサーバー
KtorはKotlin/Nativeをサポートしており、追加のランタイムや仮想マシンなしでサーバーを実行できます。
のサポート: ✅

CachingHeaders プラグインは、HTTP キャッシングに使用される Cache-Control および Expires ヘッダーを設定する機能を追加します。キャッシングは以下の方法で設定できます:

  • 画像、CSS、JavaScript ファイルなどの特定のコンテンツタイプに対して、異なるキャッシュ戦略を設定する。
  • アプリケーションレベルでのグローバル、ルートレベル、または特定のコールといった、さまざまなレベルでキャッシングオプションを指定する。

依存関係の追加

CachingHeaders を使用するには、ビルドスクリプトに ktor-server-caching-headers アーティファクトを含める必要があります。

Kotlin
Groovy
XML

CachingHeaders のインストール

CachingHeaders プラグインをアプリケーションにインストールするには、指定された

モジュール
モジュールを使用すると、ルートをグループ化してアプリケーションを構造化できます。
内の install 関数に渡します。 以下のコードスニペットは、CachingHeaders をインストールする方法を示しています...

  • ... embeddedServer 関数の呼び出し内。
  • ... Application クラスの拡張関数である、明示的に定義された module 内。
kotlin
kotlin

CachingHeaders プラグインは、特定のルートにインストールすることもできます。 これは、アプリケーションのリソースごとに異なる CachingHeaders 設定が必要な場合に便利です。

CachingHeaders をインストールした後、さまざまなコンテンツタイプに対してキャッシング設定を構成できます。

キャッシングの設定

CachingHeaders プラグインを設定するには、特定の ApplicationCall とコンテンツタイプに対して指定されたキャッシングオプションを提供するために、options 関数を定義する必要があります。caching-headers の例のコードスニペットは、プレーンテキストと HTML に対して max-age オプションを含む Cache-Control ヘッダーを追加する方法を示しています:

kotlin
fun Application.module() {
    routing {
        install(CachingHeaders) {
            options { call, content ->
                when (content.contentType?.withoutParameters()) {
                    ContentType.Text.Plain -> CachingOptions(CacheControl.MaxAge(maxAgeSeconds = 3600))
                    ContentType.Text.Html -> CachingOptions(CacheControl.MaxAge(maxAgeSeconds = 60))
                    else -> null
                }
            }
        }
    }
}

CachingOptions オブジェクトは、パラメータとして Cache-Control および Expires ヘッダーの値を受け入れます:

  • cacheControl パラメータは CacheControl 値を受け入れます。CacheControl.MaxAge を使用して max-age パラメータと、可視性、再検証オプションなどの関連設定を指定できます。CacheControl.NoCache/CacheControl.NoStore を使用してキャッシングを無効にすることもできます。
  • expires パラメータを使用すると、Expires ヘッダーを GMTDate または ZonedDateTime 値として指定できます。

ルートレベル

プラグインはグローバルだけでなく、特定のルートにもインストールできます。例えば、以下の例は /index ルートに対して指定されたキャッシングヘッダーを追加する方法を示しています:

kotlin
route("/index") {
    install(CachingHeaders) {
        options { call, content -> CachingOptions(CacheControl.MaxAge(maxAgeSeconds = 1800)) }
    }
    get {
        call.respondText("Index page")
    }
}

コールレベル

より詳細なキャッシング設定が必要な場合は、ApplicationCall.caching プロパティを使用してコールレベルでキャッシングオプションを設定できます。以下の例は、ユーザーがログインしているかどうかに応じてキャッシングオプションを設定する方法を示しています:

kotlin
route("/profile") {
    get {
        val userLoggedIn = true
        if(userLoggedIn) {
            call.caching = CachingOptions(CacheControl.NoStore(CacheControl.Visibility.Private))
            call.respondText("Profile page")
        } else {
            call.caching = CachingOptions(CacheControl.MaxAge(maxAgeSeconds = 900))
            call.respondText("Login page")
        }
    }
}

ユーザーのログインには、Authentication および Sessions プラグインを使用できます。