Skip to content
Server Plugin

조건부 헤더

필수 의존성: io.ktor:ktor-server-conditional-headers

코드 예시: conditional-headers

네이티브 서버
Ktor supports Kotlin/Native and allows you to run a server without an additional runtime or virtual machine.
지원: ✅

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 플러그인을 설치하려면, 지정된

모듈
Modules allow you to structure your application by grouping routes.
에서 install 함수에 전달하세요. 아래 코드 스니펫은 ConditionalHeaders을(를) 설치하는 방법을 보여줍니다...

  • ... embeddedServer 함수 호출 내에서.
  • ... Application 클래스의 확장 함수인 명시적으로 정의된 module 내에서.
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.