Conditional headers
The ConditionalHeaders plugin avoids sending the body of content if it has not changed since the last request. This is achieved by using the following headers:
The
Last-Modified
response header contains a resource modification time. For example, if the client request contains theIf-Modified-Since
value, Ktor will send a full response only if a resource has been modified after the given date. Note that for static files Ktor appends theLast-Modified
header automatically after installingConditionalHeaders
.The
Etag
response header is an identifier for a specific resource version. For instance, if the client request contains theIf-None-Match
value, Ktor won't send a full response in case this value matches theEtag
. You can specify theEtag
value when configuringConditionalHeaders
.
Add dependencies
To use ConditionalHeaders
, you need to include the ktor-server-conditional-headers
artifact in the build script:
Install ConditionalHeaders
To install the ConditionalHeaders
plugin to the application, pass it to the install
function in the specified module. The code snippets below show how to install ConditionalHeaders
...
... inside the
embeddedServer
function call.... inside the explicitly defined
module
, which is an extension function of theApplication
class.
The ConditionalHeaders
plugin can also be installed to specific routes. This might be useful if you need different ConditionalHeaders
configurations for different application resources.
Configure headers
To configure ConditionalHeaders
, you need to call the version function inside the install
block. This function provides access to a list of resource versions for a given ApplicationCall
and OutgoingContent
. You can specify the required versions by using the EntityTagVersion and LastModifiedVersion class objects.
The code snippet below shows how to add a Etag
and Last-Modified
headers for CSS:
You can find the full example here: conditional-headers.