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