조건부 헤더
필수 의존성: io.ktor:ktor-server-conditional-headers
코드 예제: conditional-headers
ConditionalHeaders 플러그인은 마지막 요청 이후 콘텐츠가 변경되지 않은 경우 콘텐츠 본문 전송을 방지합니다. 이는 다음과 같은 헤더를 사용하여 이루어집니다:
Last-Modified응답 헤더는 리소스 수정 시간을 포함합니다. 예를 들어, 클라이언트 요청에If-Modified-Since값이 포함된 경우, Ktor는 지정된 날짜 이후에 리소스가 수정된 경우에만 전체 응답을 보냅니다. 정적 파일의 경우, Ktor는ConditionalHeaders를 설치한 후Last-Modified헤더를 자동으로 추가합니다.Etag응답 헤더는 특정 리소스 버전에 대한 식별자입니다. 예를 들어, 클라이언트 요청에If-None-Match값이 포함된 경우, 이 값이Etag와 일치하면 Ktor는 전체 응답을 보내지 않습니다.ConditionalHeaders를 설정할 때Etag값을 지정할 수 있습니다.
의존성 추가
ConditionalHeaders를 사용하려면 빌드 스크립트에 ktor-server-conditional-headers 아티팩트를 포함해야 합니다:
ConditionalHeaders 설치
애플리케이션에 ConditionalHeaders 플러그인을 설치하려면, 지정된
install 함수에 전달하세요. 아래 코드 스니펫은 ConditionalHeaders를 설치하는 방법을 보여줍니다 ... - ...
embeddedServer함수 호출 내부에서. - ...
Application클래스의 확장 함수인 명시적으로 정의된module내부에서.
ConditionalHeaders 플러그인은 특정 라우트에 설치할 수도 있습니다. 이는 다른 애플리케이션 리소스에 대해 서로 다른 ConditionalHeaders 설정이 필요한 경우 유용할 수 있습니다.
헤더 설정
ConditionalHeaders를 설정하려면 install 블록 내에서 version 함수를 호출해야 합니다. 이 함수는 지정된 ApplicationCall 및 OutgoingContent에 대한 리소스 버전 목록에 접근할 수 있게 해줍니다. EntityTagVersion 및 LastModifiedVersion 클래스 객체를 사용하여 필요한 버전을 지정할 수 있습니다.
아래 코드 스니펫은 CSS에 대해 Etag 및 Last-Modified 헤더를 추가하는 방법을 보여줍니다:
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.
