キャッシュヘッダー
必須の依存関係: io.ktor:ktor-server-caching-headers
コード例: caching-headers
CachingHeaders プラグインは、HTTP キャッシュに使用される Cache-Control
ヘッダーと Expires
ヘッダーを設定する機能を追加します。キャッシュは以下の方法で設定できます。
- 画像、CSS、JavaScript ファイルなど、特定のコンテンツタイプに対して異なるキャッシュ戦略を設定する。
- キャッシュオプションをさまざまなレベルで指定する:アプリケーションレベルでグローバルに、ルートレベルで、または特定の呼び出しに対して。
依存関係の追加
CachingHeaders
を使用するには、ビルドスクリプトに ktor-server-caching-headers
アーティファクトを含める必要があります。
CachingHeaders のインストール
アプリケーションに CachingHeaders
プラグインをインストールするには、指定された
install
関数に渡します。 以下のコードスニペットは、CachingHeaders
をインストールする方法を示しています... - ...
embeddedServer
関数呼び出し内。 - ...
Application
クラスの拡張関数である、明示的に定義されたmodule
内。
CachingHeaders
プラグインは、特定のルートにもインストールできます。 これは、異なるアプリケーションリソースに対して異なる CachingHeaders
設定が必要な場合に役立つ可能性があります。
CachingHeaders
をインストールしたら、さまざまなコンテンツタイプに対してキャッシュ設定を構成できます。
キャッシュの構成
CachingHeaders
プラグインを構成するには、特定の ApplicationCall
およびコンテンツタイプに対して指定されたキャッシュオプションを提供するために、options 関数を定義する必要があります。caching-headers の例のコードスニペットは、プレーンテキストおよび HTML に対して max-age
オプションを持つ Cache-Control
ヘッダーを追加する方法を示しています。
fun Application.module() {
routing {
install(CachingHeaders) {
options { call, content ->
when (content.contentType?.withoutParameters()) {
ContentType.Text.Plain -> CachingOptions(CacheControl.MaxAge(maxAgeSeconds = 3600))
ContentType.Text.Html -> CachingOptions(CacheControl.MaxAge(maxAgeSeconds = 60))
else -> null
}
}
}
}
}
CachingOptions オブジェクトは、Cache-Control
および Expires
ヘッダーの値をパラメーターとして受け入れます。
cacheControl
パラメーターは CacheControl 値を受け入れます。CacheControl.MaxAge
を使用してmax-age
パラメーターと、可視性、再検証オプションなどの関連設定を指定できます。CacheControl.NoCache
/CacheControl.NoStore
を使用してキャッシュを無効にすることができます。expires
パラメーターを使用すると、Expires
ヘッダーをGMTDate
またはZonedDateTime
値として指定できます。
ルートレベル
プラグインは、グローバルだけでなく、特定のルートにもインストールできます。たとえば、以下の例は、/index
ルートに指定されたキャッシュヘッダーを追加する方法を示しています。
route("/index") {
install(CachingHeaders) {
options { call, content -> CachingOptions(CacheControl.MaxAge(maxAgeSeconds = 1800)) }
}
get {
call.respondText("Index page")
}
}
呼び出しレベル
よりきめ細やかなキャッシュ設定が必要な場合は、ApplicationCall.caching
プロパティを使用して呼び出しレベルでキャッシュオプションを構成できます。以下の例は、ユーザーがログインしているかどうかに応じてキャッシュオプションを構成する方法を示しています。
route("/profile") {
get {
val userLoggedIn = true
if(userLoggedIn) {
call.caching = CachingOptions(CacheControl.NoStore(CacheControl.Visibility.Private))
call.respondText("Profile page")
} else {
call.caching = CachingOptions(CacheControl.MaxAge(maxAgeSeconds = 900))
call.respondText("Login page")
}
}
}
ユーザーのログインには、Authentication および Sessions プラグインを使用できます。