Skip to content
Server Plugin

条件付きヘッダー

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

コード例: conditional-headers

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

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

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

依存関係の追加

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

Kotlin
Groovy
XML

ConditionalHeadersのインストール

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

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

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

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

ヘッダーの設定

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

以下のコードスニペットは、CSSにEtagLast-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