Skip to content
Server Plugin

条件标头

所需依赖项: io.ktor:ktor-server-conditional-headers

代码示例: conditional-headers

原生服务器
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 内部,它是 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