Skip to content
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 函式。此函式提供了存取給定 ApplicationCallOutgoingContent 的資源版本清單。您可以使用 EntityTagVersionLastModifiedVersion 類別物件來指定所需的版本。

下方的程式碼片段展示了如何為 CSS 新增 EtagLast-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