Skip to content
Server Plugin

キャッシュヘッダー

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

コード例: caching-headers

ネイティブサーバー
Ktor supports Kotlin/Native and allows you to run a server without an additional runtime or virtual machine.
のサポート: ✅

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

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

依存関係の追加

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

Kotlin
Groovy
XML

CachingHeaders のインストール

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

モジュール
Modules allow you to structure your application by grouping routes.
内の 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 プラグインを使用できます。