조건부 헤더
필수 의존성: 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.