Skip to content
Server Plugin

条件付きヘッダー

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

コード例: conditional-headers

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

ConditionalHeadersプラグインは、前回のリクエストからコンテンツが変更されていない場合に、コンテンツのボディの送信を回避します。これは、以下のヘッダーを使用することで実現されます:

  • Last-Modifiedレスポンスヘッダーには、リソースの更新日時が含まれます。例えば、クライアントのリクエストにIf-Modified-Since値が含まれている場合、Ktorは指定された日付以降にリソースが変更された場合にのみ、完全なレスポンスを送信します。なお、静的ファイルの場合、ConditionalHeadersをインストールすると、Ktorは自動的にLast-Modifiedヘッダーを追加します。
  • Etagレスポンスヘッダーは、特定のリソースバージョンの識別子です。例えば、クライアントのリクエストにIf-None-Match値が含まれている場合、この値がEtagと一致すれば、Ktorは完全なレスポンスを送信しません。Etag値は、ConditionalHeadersを設定する際に指定できます。

依存関係の追加

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

Kotlin
Groovy
XML

ConditionalHeadersのインストール

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

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

  • ... embeddedServer関数の呼び出し内。
  • ... 明示的に定義されたmoduleApplicationクラスの拡張関数)内。
kotlin
kotlin

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

ヘッダーの設定

ConditionalHeadersを設定するには、installブロック内でversion関数を呼び出す必要があります。この関数は、指定されたApplicationCallおよびOutgoingContentに対するリソースバージョンのリストへのアクセスを提供します。EntityTagVersionおよびLastModifiedVersionクラスのオブジェクトを使用して、必要なバージョンを指定できます。

以下のコードスニペットは、CSSに対してEtagおよびLast-Modifiedヘッダーを追加する方法を示しています:

kotlin
install(ConditionalHeaders) {
    val file = File("src/main/kotlin/com/example/Application.kt")
    version { call, outgoingContent ->
        when (outgoingContent.contentType?.withoutParameters()) {
            ContentType.Text.CSS -> listOf(
                EntityTagVersion(file.lastModified().hashCode().toString()),
                LastModifiedVersion(Date(file.lastModified()))
            )
            else -> emptyList()
        }
    }
}

完全な例はこちらにあります:conditional-headers