Server Plugin
條件式標頭
必要相依性:io.ktor:ktor-server-conditional-headers
程式碼範例: conditional-headers
Native 伺服器 支援:✅ 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 構件:
Kotlin
Groovy
XML
安裝 ConditionalHeaders
若要將 ConditionalHeaders 外掛程式安裝至應用程式,請將其傳遞給指定
模組
中的 模組允許您透過對路由進行分組來建構您的應用程式。
install 函式。 下方的程式碼片段展示了如何安裝 ConditionalHeaders ... - ... 在
embeddedServer函式呼叫中。 - ... 在明確定義的
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。
