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 函数。此函数提供了对给定 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。