条件付きヘッダー
必須の依存関係: io.ktor:ktor-server-conditional-headers
コード例: conditional-headers
ConditionalHeadersプラグインは、前回のリクエストからコンテンツが変更されていない場合に、コンテンツのボディの送信を回避します。これは、以下のヘッダーを使用することで実現されます:
Last-Modifiedレスポンスヘッダーには、リソースの更新日時が含まれます。例えば、クライアントのリクエストにIf-Modified-Since値が含まれている場合、Ktorは指定された日付以降にリソースが変更された場合にのみ、完全なレスポンスを送信します。なお、静的ファイルの場合、ConditionalHeadersをインストールすると、Ktorは自動的にLast-Modifiedヘッダーを追加します。Etagレスポンスヘッダーは、特定のリソースバージョンの識別子です。例えば、クライアントのリクエストにIf-None-Match値が含まれている場合、この値がEtagと一致すれば、Ktorは完全なレスポンスを送信しません。Etag値は、ConditionalHeadersを設定する際に指定できます。
依存関係の追加
ConditionalHeadersを使用するには、ビルドスクリプトにktor-server-conditional-headersアーティファクトを含める必要があります:
ConditionalHeadersのインストール
ConditionalHeadersプラグインをアプリケーションにインストールするには、指定された
install関数に渡します。 以下のコードスニペットは、ConditionalHeadersをインストールする方法を示しています... - ...
embeddedServer関数の呼び出し内。 - ... 明示的に定義された
module(Applicationクラスの拡張関数)内。
ConditionalHeadersプラグインは、特定のルートにインストールすることもできます。 これは、アプリケーションのリソースごとに異なるConditionalHeaders設定が必要な場合に役立ちます。
ヘッダーの設定
ConditionalHeadersを設定するには、installブロック内でversion関数を呼び出す必要があります。この関数は、指定されたApplicationCallおよびOutgoingContentに対するリソースバージョンのリストへのアクセスを提供します。EntityTagVersionおよびLastModifiedVersionクラスのオブジェクトを使用して、必要なバージョンを指定できます。
以下のコードスニペットは、CSSに対してEtagおよびLast-Modifiedヘッダーを追加する方法を示しています:
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。
