Skip to content
Server Plugin

조건부 헤더

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

코드 예제: conditional-headers

Native 서버
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 함수 호출 내부에서.
  • ... 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.