条件付きヘッダー
必須の依存関係: 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。