CachingOptions機能を使うと、Cache-Control
とExpires
ヘッダーを送信し、
クライアントやプロキシにリクエストを簡単にキャッシュさせることができます。
io.ktor.features.CachingHeaders
and no additional artifacts are required.
その他多くのFeatureと同じように、基本的な機能は初めからインストールされます。
しかし何かしらを行おうと思った場合は、
以下の例のようにoutputContentをCachingOptionsに変換するoptions
ブロックを定義する必要があります:
install(CachingHeaders) {
options { outgoingContent ->
when (outgoingContent.contentType?.withoutParameters()) {
ContentType.Text.CSS -> CachingOptions(CacheControl.MaxAge(maxAgeSeconds = 24 * 60 * 60))
else -> null
}
}
}
options
設定メソッドを使うと、引数として与えられたoutgoingContent: OutgoingContent
から、
オプショナルでCachingOptions
を指定するコードを定義できます。
例えば、送信メッセージのContent-Type
を使い、どのCache-Controlが使われるのかを決めることができます。
options
高階関数を使うときCachingOption
を返すことで、CacheControl
とあとオプションとして有効期限も示す必要があります:
data class CachingOptions(val cacheControl: CacheControl? = null, val expires: ZonedDateTime? = null)
sealed class CacheControl(val visibility: Visibility?) {
enum class Visibility { Public, Private }
class NoCache(visibility: Visibility?) : CacheControl(visibility)
class NoStore(visibility: Visibility?) : CacheControl(visibility)
class MaxAge(val maxAgeSeconds: Int, val proxyMaxAgeSeconds: Int? = null, val mustRevalidate: Boolean = false, val proxyRevalidate: Boolean = false, visibility: Visibility? = null) : CacheControl(visibility)
}
いくつかのOptionがある場合、マッチしたOptionごとにCache-Control
ヘッダーを付与します。