Skip to content
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 內部,該 moduleApplication 類別的一個擴充函數。
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