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 构件:

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