Server Plugin
條件式標頭
所需依賴項:io.ktor:ktor-server-conditional-headers
程式碼範例: conditional-headers
Native server 支援: ✅ Ktor 支援 Kotlin/Native,並允許您在沒有額外運行時或虛擬機器的情況下運行伺服器。
ConditionalHeaders 外掛程式可避免在內容自上次請求後未發生變化時發送其內容主體。這是透過使用以下標頭來實現的:
Last-Modified
回應標頭包含資源修改時間。例如,如果用戶端請求包含If-Modified-Since
值,Ktor 將僅在資源於給定日期之後被修改時才發送完整回應。請注意,對於靜態檔案,Ktor 會在安裝ConditionalHeaders
後自動附加Last-Modified
標頭。Etag
回應標頭是特定資源版本的識別碼。例如,如果用戶端請求包含If-None-Match
值,則當此值與Etag
匹配時,Ktor 將不會發送完整回應。您可以在配置ConditionalHeaders
時指定Etag
值。
添加依賴項
要使用 ConditionalHeaders
,您需要在建置腳本中包含 ktor-server-conditional-headers
artifact:
Kotlin
Groovy
XML
安裝 ConditionalHeaders
要將 ConditionalHeaders
外掛程式安裝到應用程式中, 請將其傳遞給指定
模組
中的 模組允許您透過分組路由來組織您的應用程式。
install
函數。 以下程式碼片段展示了如何安裝 ConditionalHeaders
... - ... 在
embeddedServer
函數呼叫內部。 - ... 在明確定義的
module
內部,該module
是Application
類別的一個擴充函數。
kotlin
kotlin
ConditionalHeaders
外掛程式也可以安裝到特定路由。 如果您需要針對不同的應用程式資源使用不同的 ConditionalHeaders
配置,這可能會很有用。
配置標頭
要配置 ConditionalHeaders
,您需要在 install
區塊內部呼叫 version 函數。此函數提供了存取給定 ApplicationCall
和 OutgoingContent
的資源版本列表。您可以透過使用 EntityTagVersion 和 LastModifiedVersion 類別物件來指定所需的版本。
以下程式碼片段展示了如何為 CSS 添加 Etag
和 Last-Modified
標頭:
kotlin
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。