キャッシュヘッダー
必須の依存関係: 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 プラグインを使用できます。
