快取標頭
所需依賴項: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函數呼叫內部。 - ... 在明確定義的
module內部,它是一個Application類別的擴充函數。
CachingHeaders 插件也可以安裝到特定路由。 如果您需要針對不同的應用程式資源使用不同的 CachingHeaders 配置,這可能會很有用。
安裝 CachingHeaders 後,您可以 配置 各種內容類型的快取設定。
配置快取
若要配置 CachingHeaders 插件,您需要定義 options 函數,為給定的 ApplicationCall 和內容類型提供指定的快取選項。來自 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 插件。
