<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>genhttp-kt</title><link>https://genhttp-kt.genhttp.run/</link><description>Recent content on genhttp-kt</description><generator>Hugo</generator><language>en-us</language><atom:link href="https://genhttp-kt.genhttp.run/index.xml" rel="self" type="application/rss+xml"/><item><title>Coming from GenHTTP</title><link>https://genhttp-kt.genhttp.run/documentation/port/coming-from-genhttp/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://genhttp-kt.genhttp.run/documentation/port/coming-from-genhttp/</guid><description>&lt;p&gt;If you know GenHTTP, you already know genhttp-kt. The API is the same - the same builders,&#10;modules, handlers and concerns - written the way a Kotlin developer expects. This page shows&#10;how C# translates, so you can use the samples you find for GenHTTP, and the&#10;&lt;a href="https://genhttp.org/documentation/" rel="noopener"&gt;GenHTTP documentation&lt;/a&gt; itself, with genhttp-kt.&lt;/p&gt;&#10;&lt;p&gt;The samples on this page have a C# and a Kotlin tab. Choose one and every sample of the page&#10;switches with it.&lt;/p&gt;</description></item><item><title>Internal</title><link>https://genhttp-kt.genhttp.run/documentation/server/engines/internal/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://genhttp-kt.genhttp.run/documentation/server/engines/internal/</guid><description>&lt;div class="cards"&gt;&#10; &lt;a class="card card-icon" href="https://central.sonatype.com/artifact/org.genhttp/genhttp-full" rel="noopener"&gt;&lt;svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"&gt;&lt;path d="m16.5 9.4-9-5.19"/&gt;&lt;path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"/&gt;&lt;path d="M3.29 7 12 12l8.71-5M12 22V12"/&gt;&lt;/svg&gt;&lt;span class="card-title"&gt;genhttp-full&lt;/span&gt; &lt;span class="card-text"&gt;Package on Maven Central&lt;/span&gt;&lt;svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"&gt;&lt;path d="M7 17 17 7M8 7h9v9"/&gt;&lt;/svg&gt;&lt;/a&gt;&#10;&#10; &lt;a class="card card-icon" href="https://central.sonatype.com/artifact/org.genhttp/genhttp-core" rel="noopener"&gt;&lt;svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"&gt;&lt;path d="m16.5 9.4-9-5.19"/&gt;&lt;path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"/&gt;&lt;path d="M3.29 7 12 12l8.71-5M12 22V12"/&gt;&lt;/svg&gt;&lt;span class="card-title"&gt;genhttp-core&lt;/span&gt; &lt;span class="card-text"&gt;Package on Maven Central&lt;/span&gt;&lt;svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"&gt;&lt;path d="M7 17 17 7M8 7h9v9"/&gt;&lt;/svg&gt;&lt;/a&gt;&#10;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;This is the default HTTP implementation of genhttp-kt, the port of GenHTTP&amp;rsquo;s internal engine. It is written&#10;in Kotlin and relies only on the JDK, kotlinx.coroutines and the SLF4J API, which keeps the dependencies of&#10;your application and the environment it needs to a minimum. This makes it a good choice for embedding a&#10;web service into another application (e.g. a desktop application) or hosting a small service as a Docker&#10;container. Both &lt;code&gt;genhttp-core&lt;/code&gt; and &lt;code&gt;genhttp-full&lt;/code&gt; contain it.&lt;/p&gt;</description></item><item><title>Request API</title><link>https://genhttp-kt.genhttp.run/documentation/content/concepts/request-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://genhttp-kt.genhttp.run/documentation/content/concepts/request-api/</guid><description>&lt;h2 id="request-api"&gt;Request API&lt;a class="anchor" href="#request-api" aria-label="Link to this section"&gt;&lt;svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"&gt;&lt;path d="M4 9h16M4 15h16M10 3 8 21M16 3l-2 18"/&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;To handle incoming HTTP requests, genhttp-kt uses the &lt;code&gt;Request&lt;/code&gt; abstraction, which - besides granting access to&#10;infrastructure components such as the &lt;code&gt;Server&lt;/code&gt;, &lt;code&gt;EndPoint&lt;/code&gt; or &lt;code&gt;ClientConnection&lt;/code&gt; - is intended to represent the data&#10;on the wire as it was received by the connected client.&lt;/p&gt;&#10;&lt;p&gt;The core entry points to handle requests are &lt;a href="../../handlers/"&gt;handlers&lt;/a&gt; and &lt;a href="../../concerns/"&gt;concerns&lt;/a&gt;. The server&#10;host is passed a handler instance (known as root handler) which is then responsible for handling all incoming requests.&#10;If needed, it can use other handlers to delegate work (see &lt;a href="../../handlers/layouting/"&gt;layouting&lt;/a&gt; as a starting point).&lt;/p&gt;</description></item><item><title>Routing</title><link>https://genhttp-kt.genhttp.run/documentation/content/concepts/routing/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://genhttp-kt.genhttp.run/documentation/content/concepts/routing/</guid><description>&lt;p&gt;When the server receives a request from the client, it passes it to the root handler&#10;specified by your application. Depending on the requested path, this handler&#10;may invoke additional handlers to actually produce a response. The tree of handlers&#10;available in your application is called &lt;em&gt;handler chain&lt;/em&gt;. As requests are passed&#10;from one handler to another, they need to track, which segments of the requested&#10;path have already been considered and which still need to be evaluated,&#10;effectively decoupling them from each other. This&#10;capability is provided by the routing feature of the framework.&lt;/p&gt;</description></item><item><title>Webservices</title><link>https://genhttp-kt.genhttp.run/documentation/content/frameworks/webservices/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://genhttp-kt.genhttp.run/documentation/content/frameworks/webservices/</guid><description>&lt;div class="cards"&gt;&#10;&lt;a class="card card-icon" href="https://central.sonatype.com/artifact/org.genhttp/genhttp-modules-webservices" rel="noopener"&gt;&lt;svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"&gt;&lt;path d="m16.5 9.4-9-5.19"/&gt;&lt;path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"/&gt;&lt;path d="M3.29 7 12 12l8.71-5M12 22V12"/&gt;&lt;/svg&gt;&lt;span class="card-title"&gt;genhttp-modules-webservices&lt;/span&gt; &lt;span class="card-text"&gt;Package on Maven Central&lt;/span&gt;&lt;svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"&gt;&lt;path d="M7 17 17 7M8 7h9v9"/&gt;&lt;/svg&gt;&lt;/a&gt;&#10;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;The webservice module provides an easy way to implement RESTful services&#10;that can be consumed by clients as needed.&lt;/p&gt;</description></item><item><title>Deviations</title><link>https://genhttp-kt.genhttp.run/documentation/port/deviations/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://genhttp-kt.genhttp.run/documentation/port/deviations/</guid><description>&lt;p&gt;genhttp-kt keeps the API and the behavior of GenHTTP. Where the JVM, Kotlin or a library&#10;requires a different solution, the port says so - this page lists every such place, grouped by&#10;the area you will meet it in. The complete log is&#10;&lt;a href="https://github.com/Kaliumhexacyanoferrat/genhttp-kt/blob/main/docs/DEVIATIONS.md" rel="noopener"&gt;DEVIATIONS.md&lt;/a&gt;&#10;in the repository.&lt;/p&gt;&#10;&lt;div class="callout callout-important" role="note" aria-label="Important"&gt;&#10; &lt;svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"&gt;&lt;path d="M15 14c.2-1 .7-1.7 1.5-2.5 1-.9 1.5-2.2 1.5-3.5A6 6 0 0 0 6 8c0 1 .2 2.2 1.5 3.5.7.7 1.3 1.5 1.5 2.5M9 18h6M10 22h4"/&gt;&lt;/svg&gt;&#10; &lt;div class="callout-body"&gt;&lt;p&gt;The one you are most likely to trip over: Kotlin does not allow annotations or default values&#10;on lambda parameters. A functional handler that needs &lt;code&gt;@FromBody&lt;/code&gt; or an optional parameter is&#10;written as a function reference (&lt;code&gt;post(::create)&lt;/code&gt;), see&#10;&lt;a href="../coming-from-genhttp/#functional-handlers"&gt;Coming from GenHTTP&lt;/a&gt;.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>Functional Handlers</title><link>https://genhttp-kt.genhttp.run/documentation/content/frameworks/functional/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://genhttp-kt.genhttp.run/documentation/content/frameworks/functional/</guid><description>&lt;div class="cards"&gt;&#10;&lt;a class="card card-icon" href="https://central.sonatype.com/artifact/org.genhttp/genhttp-modules-functional" rel="noopener"&gt;&lt;svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"&gt;&lt;path d="m16.5 9.4-9-5.19"/&gt;&lt;path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"/&gt;&lt;path d="M3.29 7 12 12l8.71-5M12 22V12"/&gt;&lt;/svg&gt;&lt;span class="card-title"&gt;genhttp-modules-functional&lt;/span&gt; &lt;span class="card-text"&gt;Package on Maven Central&lt;/span&gt;&lt;svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"&gt;&lt;path d="M7 17 17 7M8 7h9v9"/&gt;&lt;/svg&gt;&lt;/a&gt;&#10;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;With this module, requests can be handled in a functional manner, reducing&#10;the boilerplate code to be written by a web application developer.&lt;/p&gt;</description></item><item><title>Method Definitions</title><link>https://genhttp-kt.genhttp.run/documentation/content/concepts/definitions/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://genhttp-kt.genhttp.run/documentation/content/concepts/definitions/</guid><description>&lt;p&gt;All API frameworks share a common base provided by the &lt;code&gt;Reflection&lt;/code&gt; and &lt;code&gt;Conversion&lt;/code&gt; modules which&#10;define some of the capabilities that can be used when defining an API method&#10;signature.&lt;/p&gt;&#10;&lt;h2 id="injection"&gt;Injection&lt;a class="anchor" href="#injection" aria-label="Link to this section"&gt;&lt;svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"&gt;&lt;path d="M4 9h16M4 15h16M10 3 8 21M16 3l-2 18"/&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;This section describes how parameters of your functions are initialized and which&#10;kind of types can be used.&lt;/p&gt;&#10;&lt;h3 id="primitives"&gt;Primitives&lt;a class="anchor" href="#primitives" aria-label="Link to this section"&gt;&lt;svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"&gt;&lt;path d="M4 9h16M4 15h16M10 3 8 21M16 3l-2 18"/&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;By default, a parameter type can be used within a method definition if it is either &lt;code&gt;String&lt;/code&gt;,&#10;&lt;code&gt;Boolean&lt;/code&gt;, an enum, a number (such as &lt;code&gt;Int&lt;/code&gt;, &lt;code&gt;Long&lt;/code&gt;, &lt;code&gt;Double&lt;/code&gt; or &lt;code&gt;BigDecimal&lt;/code&gt;), a &lt;code&gt;UUID&lt;/code&gt;, or one of&#10;the date and time types &lt;code&gt;Instant&lt;/code&gt;, &lt;code&gt;OffsetDateTime&lt;/code&gt;, &lt;code&gt;LocalDateTime&lt;/code&gt;, &lt;code&gt;LocalDate&lt;/code&gt;, &lt;code&gt;LocalTime&lt;/code&gt; and&#10;&lt;code&gt;kotlin.time.Duration&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Netty</title><link>https://genhttp-kt.genhttp.run/documentation/server/engines/netty/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://genhttp-kt.genhttp.run/documentation/server/engines/netty/</guid><description>&lt;div class="cards"&gt;&#10; &lt;a class="card card-icon" href="https://central.sonatype.com/artifact/org.genhttp/genhttp-full-netty" rel="noopener"&gt;&lt;svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"&gt;&lt;path d="m16.5 9.4-9-5.19"/&gt;&lt;path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"/&gt;&lt;path d="M3.29 7 12 12l8.71-5M12 22V12"/&gt;&lt;/svg&gt;&lt;span class="card-title"&gt;genhttp-full-netty&lt;/span&gt; &lt;span class="card-text"&gt;Package on Maven Central&lt;/span&gt;&lt;svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"&gt;&lt;path d="M7 17 17 7M8 7h9v9"/&gt;&lt;/svg&gt;&lt;/a&gt;&#10;&#10; &lt;a class="card card-icon" href="https://central.sonatype.com/artifact/org.genhttp/genhttp-core-netty" rel="noopener"&gt;&lt;svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"&gt;&lt;path d="m16.5 9.4-9-5.19"/&gt;&lt;path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"/&gt;&lt;path d="M3.29 7 12 12l8.71-5M12 22V12"/&gt;&lt;/svg&gt;&lt;span class="card-title"&gt;genhttp-core-netty&lt;/span&gt; &lt;span class="card-text"&gt;Package on Maven Central&lt;/span&gt;&lt;svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"&gt;&lt;path d="M7 17 17 7M8 7h9v9"/&gt;&lt;/svg&gt;&lt;/a&gt;&#10;&#10;&lt;/div&gt;&#10;&#10;&lt;div class="callout callout-info" role="note" aria-label="Note"&gt;&#10; &lt;svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"&gt;&lt;circle cx="12" cy="12" r="10"/&gt;&lt;path d="M12 16v-4M12 8h.01"/&gt;&lt;/svg&gt;&#10; &lt;div class="callout-body"&gt;&lt;p&gt;The native transports of Netty (epoll and &lt;code&gt;io_uring&lt;/code&gt;) are included for Linux on x64 and arm64. On other&#10;platforms, such as Windows and macOS, the engine runs on Java NIO, which behaves the same but does not&#10;reach the same throughput.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>Controllers</title><link>https://genhttp-kt.genhttp.run/documentation/content/frameworks/controllers/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://genhttp-kt.genhttp.run/documentation/content/frameworks/controllers/</guid><description>&lt;div class="cards"&gt;&#10;&lt;a class="card card-icon" href="https://central.sonatype.com/artifact/org.genhttp/genhttp-modules-controllers" rel="noopener"&gt;&lt;svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"&gt;&lt;path d="m16.5 9.4-9-5.19"/&gt;&lt;path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"/&gt;&lt;path d="M3.29 7 12 12l8.71-5M12 22V12"/&gt;&lt;/svg&gt;&lt;span class="card-title"&gt;genhttp-modules-controllers&lt;/span&gt; &lt;span class="card-text"&gt;Package on Maven Central&lt;/span&gt;&lt;svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"&gt;&lt;path d="M7 17 17 7M8 7h9v9"/&gt;&lt;/svg&gt;&lt;/a&gt;&#10;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;This framework allows to create APIs by defining and implementing controller classes. In contrast&#10;to Spring MVC, you cannot use this framework to dynamically render HTML pages in an MVC style project,&#10;so this is just another flavor of defining a web API.&lt;/p&gt;</description></item><item><title>Execution Modes</title><link>https://genhttp-kt.genhttp.run/documentation/content/concepts/execution-modes/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://genhttp-kt.genhttp.run/documentation/content/concepts/execution-modes/</guid><description>&lt;p&gt;The service frameworks (&lt;a href="../../frameworks/webservices/"&gt;webservices&lt;/a&gt;, &lt;a href="../../frameworks/functional/"&gt;functional handlers&lt;/a&gt;&#10;and &lt;a href="../../frameworks/controllers/"&gt;controllers&lt;/a&gt;) analyze the signature of each of your functions with&#10;&lt;a href="https://kotlinlang.org/docs/reflection.html" rel="noopener"&gt;kotlin-reflect&lt;/a&gt;: where every argument is read from, how the result&#10;is sent to the client and which &lt;a href="../definitions/#interceptors"&gt;interceptors&lt;/a&gt; run before the function. This analysis&#10;is done once, while the handler chain is prepared (i.e. when the server starts), and not when a request is handled.&lt;/p&gt;&#10;&lt;p&gt;For every request, the framework then reads the arguments in the order of the parameters, invokes the function and&#10;maps the result into an HTTP response. How the function is invoked is controlled by the execution mode.&lt;/p&gt;</description></item><item><title>Logging</title><link>https://genhttp-kt.genhttp.run/documentation/server/logging/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://genhttp-kt.genhttp.run/documentation/server/logging/</guid><description>&lt;p&gt;genhttp-kt logs through &lt;a href="https://www.slf4j.org/" rel="noopener"&gt;SLF4J&lt;/a&gt;, the logging facade of the JVM,&#10;and allows to create loggers via the &lt;code&gt;Server&lt;/code&gt; interface. If there is an SLF4J provider on the&#10;classpath (such as Logback, Log4j 2 or slf4j-simple), the server logs through it. Otherwise,&#10;the host falls back to a console logger of its own (and SLF4J warns once at startup that it&#10;found no provider).&lt;/p&gt;&#10;&lt;h2 id="logging-information"&gt;Logging Information&lt;a class="anchor" href="#logging-information" aria-label="Link to this section"&gt;&lt;svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"&gt;&lt;path d="M4 9h16M4 15h16M10 3 8 21M16 3l-2 18"/&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;The following code shows to obtain a logger from the server instance in&#10;a custom &lt;code&gt;Handler&lt;/code&gt; implementation. It is recommended to create the logger&#10;once in the preparation phase and store the reference somewhere. You can use&#10;this pattern anywhere where you have access to &lt;code&gt;Server&lt;/code&gt; (e.g. via &lt;code&gt;request.server&lt;/code&gt;).&lt;/p&gt;</description></item><item><title>Versions and Sync</title><link>https://genhttp-kt.genhttp.run/documentation/port/versioning/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://genhttp-kt.genhttp.run/documentation/port/versioning/</guid><description>&lt;h2 id="versions"&gt;Versions&lt;a class="anchor" href="#versions" aria-label="Link to this section"&gt;&lt;svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"&gt;&lt;path d="M4 9h16M4 15h16M10 3 8 21M16 3l-2 18"/&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Versions of genhttp-kt have four components: the version of GenHTTP the port is based on,&#10;followed by a counter of releases of the port itself.&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Version&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Meaning&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;11.1.0.0&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;The first release based on GenHTTP &lt;code&gt;11.1.0&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;11.1.0.1&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;A release of the port only - a fix in the port, updated libraries&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;11.2.0.0&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;The first release based on GenHTTP &lt;code&gt;11.2.0&lt;/code&gt; - the counter resets&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;Gradle and Maven order these versions correctly, and the tags of the repository are named&#10;after them (&lt;code&gt;v11.1.0.0&lt;/code&gt;). This documentation describes genhttp-kt 11.1.0.3, based on&#10;GenHTTP 11.1.0.&lt;/p&gt;</description></item><item><title>Endpoints and Ports</title><link>https://genhttp-kt.genhttp.run/documentation/server/endpoints/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://genhttp-kt.genhttp.run/documentation/server/endpoints/</guid><description>&lt;p&gt;By default, the server will listen on port 8080 for incoming IPv4 or IPv6 connections on&#10;any interface. To simply change the port the server will listen on, you can use&#10;the &lt;code&gt;port()&lt;/code&gt; directive of the host. Please note, that hosting a server on ports below 1024&#10;will require additional permissions on some operating systems.&lt;/p&gt;&#10;&lt;div class="code-block"&gt;&#10; &lt;div class="code-bar"&gt;&#10; &lt;span class="code-lang"&gt;Kotlin&lt;/span&gt;&#10; &lt;button class="code-copy" type="button" data-copy aria-label="Copy the code" hidden&gt;&lt;svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"&gt;&lt;rect width="14" height="14" x="8" y="8" rx="2"/&gt;&lt;path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"/&gt;&lt;/svg&gt;&lt;svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"&gt;&lt;path d="M20 6 9 17l-5-5"/&gt;&lt;/svg&gt;&lt;span&gt;Copy&lt;/span&gt;&lt;/button&gt;&#10; &lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-kotlin" data-lang="kotlin"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;val&lt;/span&gt; &lt;span class="py"&gt;app&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Layout&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;create&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;val&lt;/span&gt; &lt;span class="py"&gt;host&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Host&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;create&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;handler&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;port&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;80&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;To configure the server to listen on specific interfaces only, you can &lt;code&gt;bind()&lt;/code&gt; those&#10;endpoints explicitly. As soon as an endpoint is bound, the port set via &lt;code&gt;port()&lt;/code&gt; is ignored.&lt;/p&gt;</description></item><item><title>Response Content</title><link>https://genhttp-kt.genhttp.run/documentation/content/concepts/response-content/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://genhttp-kt.genhttp.run/documentation/content/concepts/response-content/</guid><description>&lt;div class="cards"&gt;&#10;&lt;a class="card card-icon" href="https://central.sonatype.com/artifact/org.genhttp/genhttp-modules-io" rel="noopener"&gt;&lt;svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"&gt;&lt;path d="m16.5 9.4-9-5.19"/&gt;&lt;path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"/&gt;&lt;path d="M3.29 7 12 12l8.71-5M12 22V12"/&gt;&lt;/svg&gt;&lt;span class="card-title"&gt;genhttp-modules-io&lt;/span&gt; &lt;span class="card-text"&gt;Package on Maven Central&lt;/span&gt;&lt;svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"&gt;&lt;path d="M7 17 17 7M8 7h9v9"/&gt;&lt;/svg&gt;&lt;/a&gt;&#10;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;When sending content in response to a client request, &lt;code&gt;ResponseBuilder&lt;/code&gt; has a single entry point for it:&#10;&lt;code&gt;content(content: ResponseContent?)&lt;/code&gt;. Everything about the content itself - its &lt;code&gt;length&lt;/code&gt;, &lt;code&gt;type&lt;/code&gt; and&#10;&lt;code&gt;encoding&lt;/code&gt; - is a property of the &lt;code&gt;ResponseContent&lt;/code&gt; implementation being passed in, not something configured&#10;separately on the builder. &lt;code&gt;length&lt;/code&gt; is the number of bytes the content will produce; if it is not known,&#10;chunked transfer encoding is applied.&lt;/p&gt;</description></item><item><title>Websockets</title><link>https://genhttp-kt.genhttp.run/documentation/content/frameworks/websockets/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://genhttp-kt.genhttp.run/documentation/content/frameworks/websockets/</guid><description>&lt;div class="cards"&gt;&#10;&lt;a class="card card-icon" href="https://central.sonatype.com/artifact/org.genhttp/genhttp-modules-websockets" rel="noopener"&gt;&lt;svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"&gt;&lt;path d="m16.5 9.4-9-5.19"/&gt;&lt;path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"/&gt;&lt;path d="M3.29 7 12 12l8.71-5M12 22V12"/&gt;&lt;/svg&gt;&lt;span class="card-title"&gt;genhttp-modules-websockets&lt;/span&gt; &lt;span class="card-text"&gt;Package on Maven Central&lt;/span&gt;&lt;svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"&gt;&lt;path d="M7 17 17 7M8 7h9v9"/&gt;&lt;/svg&gt;&lt;/a&gt;&#10;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;Websockets allow to create a bidirectional connection between your clients and your server,&#10;allowing both sides to push content without the need of sending HTTP requests.&lt;/p&gt;</description></item><item><title>Resources</title><link>https://genhttp-kt.genhttp.run/documentation/content/concepts/resources/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://genhttp-kt.genhttp.run/documentation/content/concepts/resources/</guid><description>&lt;div class="cards"&gt;&#10;&lt;a class="card card-icon" href="https://central.sonatype.com/artifact/org.genhttp/genhttp-modules-io" rel="noopener"&gt;&lt;svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"&gt;&lt;path d="m16.5 9.4-9-5.19"/&gt;&lt;path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"/&gt;&lt;path d="M3.29 7 12 12l8.71-5M12 22V12"/&gt;&lt;/svg&gt;&lt;span class="card-title"&gt;genhttp-modules-io&lt;/span&gt; &lt;span class="card-text"&gt;Package on Maven Central&lt;/span&gt;&lt;svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"&gt;&lt;path d="M7 17 17 7M8 7h9v9"/&gt;&lt;/svg&gt;&lt;/a&gt;&#10;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;genhttp-kt provides a thin abstraction layer to control access of binary resources&#10;(such as files or blobs). This allows to re-use file-dependent handlers, independent from&#10;whether the data comes from the file system, the classpath, a database or somewhere else.&lt;/p&gt;</description></item><item><title>Security</title><link>https://genhttp-kt.genhttp.run/documentation/server/security/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://genhttp-kt.genhttp.run/documentation/server/security/</guid><description>&lt;p&gt;This page summarizes security considerations and configuration options&#10;when running genhttp-kt applications.&lt;/p&gt;&#10;&lt;h2 id="general-considerations"&gt;General Considerations&lt;a class="anchor" href="#general-considerations" aria-label="Link to this section"&gt;&lt;svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"&gt;&lt;path d="M4 9h16M4 15h16M10 3 8 21M16 3l-2 18"/&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;genhttp-kt is designed to be used as an application server behind a reverse proxy, and therefore does not provide built-in DoS protection (such as IP connection limits or Slowloris prevention).&#10;However, its engines are hardened against typical attack vectors such as request smuggling, header injection, or malformed chunk attacks:&#10;both parse requests with a port of &lt;a href="https://github.com/dotnet-web-stack/Glyph11" rel="noopener"&gt;Glyph11&lt;/a&gt;, the hardened parser of GenHTTP, and passes&#10;the ported acceptance tests of GenHTTP, which is &lt;a href="https://www.http-probe.com/servers/genhttp.html" rel="noopener"&gt;explicitly tested&lt;/a&gt; for these attacks.&lt;/p&gt;</description></item><item><title>Single Page Applications (SPA)</title><link>https://genhttp-kt.genhttp.run/documentation/content/frameworks/single-page-applications/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://genhttp-kt.genhttp.run/documentation/content/frameworks/single-page-applications/</guid><description>&lt;div class="cards"&gt;&#10;&lt;a class="card card-icon" href="https://central.sonatype.com/artifact/org.genhttp/genhttp-modules-single-page-applications" rel="noopener"&gt;&lt;svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"&gt;&lt;path d="m16.5 9.4-9-5.19"/&gt;&lt;path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"/&gt;&lt;path d="M3.29 7 12 12l8.71-5M12 22V12"/&gt;&lt;/svg&gt;&lt;span class="card-title"&gt;genhttp-modules-single-page-applications&lt;/span&gt; &lt;span class="card-text"&gt;Package on Maven Central&lt;/span&gt;&lt;svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"&gt;&lt;path d="M7 17 17 7M8 7h9v9"/&gt;&lt;/svg&gt;&lt;/a&gt;&#10;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;This handler provides an easy way to serve a single page application (for example a&#10;Vue.js, React, or Angular app) to your clients.&lt;/p&gt;</description></item><item><title>Dependency Injection</title><link>https://genhttp-kt.genhttp.run/documentation/content/concepts/dependency-injection/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://genhttp-kt.genhttp.run/documentation/content/concepts/dependency-injection/</guid><description>&lt;div class="cards"&gt;&#10;&lt;a class="card card-icon" href="https://central.sonatype.com/artifact/org.genhttp/genhttp-modules-dependency-injection" rel="noopener"&gt;&lt;svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"&gt;&lt;path d="m16.5 9.4-9-5.19"/&gt;&lt;path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"/&gt;&lt;path d="M3.29 7 12 12l8.71-5M12 22V12"/&gt;&lt;/svg&gt;&lt;span class="card-title"&gt;genhttp-modules-dependency-injection&lt;/span&gt; &lt;span class="card-text"&gt;Package on Maven Central&lt;/span&gt;&lt;svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"&gt;&lt;path d="M7 17 17 7M8 7h9v9"/&gt;&lt;/svg&gt;&lt;/a&gt;&#10;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;This optional module allows to use &lt;a href="https://insert-koin.io/" rel="noopener"&gt;Koin&lt;/a&gt; to inject dependencies into handlers,&#10;concerns and framework classes as well as their functions.&lt;/p&gt;</description></item><item><title>Static Websites</title><link>https://genhttp-kt.genhttp.run/documentation/content/frameworks/static-websites/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://genhttp-kt.genhttp.run/documentation/content/frameworks/static-websites/</guid><description>&lt;div class="cards"&gt;&#10;&lt;a class="card card-icon" href="https://central.sonatype.com/artifact/org.genhttp/genhttp-modules-static-websites" rel="noopener"&gt;&lt;svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"&gt;&lt;path d="m16.5 9.4-9-5.19"/&gt;&lt;path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"/&gt;&lt;path d="M3.29 7 12 12l8.71-5M12 22V12"/&gt;&lt;/svg&gt;&lt;span class="card-title"&gt;genhttp-modules-static-websites&lt;/span&gt; &lt;span class="card-text"&gt;Package on Maven Central&lt;/span&gt;&lt;svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"&gt;&lt;path d="M7 17 17 7M8 7h9v9"/&gt;&lt;/svg&gt;&lt;/a&gt;&#10;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;This handler provides an easy way to serve a static website such as a &lt;a href="https://gohugo.io/" rel="noopener"&gt;Hugo&lt;/a&gt;&#10;application to your clients.&lt;/p&gt;</description></item><item><title>Custom Frameworks</title><link>https://genhttp-kt.genhttp.run/documentation/content/frameworks/custom/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://genhttp-kt.genhttp.run/documentation/content/frameworks/custom/</guid><description>&lt;div class="cards"&gt;&#10;&lt;a class="card card-icon" href="https://central.sonatype.com/artifact/org.genhttp/genhttp-modules-reflection" rel="noopener"&gt;&lt;svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"&gt;&lt;path d="m16.5 9.4-9-5.19"/&gt;&lt;path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"/&gt;&lt;path d="M3.29 7 12 12l8.71-5M12 22V12"/&gt;&lt;/svg&gt;&lt;span class="card-title"&gt;genhttp-modules-reflection&lt;/span&gt; &lt;span class="card-text"&gt;Package on Maven Central&lt;/span&gt;&lt;svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"&gt;&lt;path d="M7 17 17 7M8 7h9v9"/&gt;&lt;/svg&gt;&lt;/a&gt;&#10;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;The framework layer of genhttp-kt allows application frameworks (such as webservices or controllers) to host a set&#10;of operations (put simply a route with a piece of Kotlin code to be executed). This way the application framework&#10;itself is only a very thin layer - it analyzes the given scope (such as a controller class) and derives operations&#10;from it which are then handled by the generic framework part. This way, all application frameworks share&#10;the same feature level and can support things like parameter binding, serialization, &lt;code&gt;suspend&lt;/code&gt; functions&#10;or &lt;a href="../../concepts/execution-modes/"&gt;execution modes&lt;/a&gt;. To give an example, the handler which provides the whole&#10;webservice framework consists of about 60 lines of code only - everything else is done by the underlying framework layer.&lt;/p&gt;</description></item><item><title>API Browsing</title><link>https://genhttp-kt.genhttp.run/documentation/content/handlers/api-browsing/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://genhttp-kt.genhttp.run/documentation/content/handlers/api-browsing/</guid><description>&lt;div class="cards"&gt;&#10;&lt;a class="card card-icon" href="https://central.sonatype.com/artifact/org.genhttp/genhttp-modules-api-browsing" rel="noopener"&gt;&lt;svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"&gt;&lt;path d="m16.5 9.4-9-5.19"/&gt;&lt;path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"/&gt;&lt;path d="M3.29 7 12 12l8.71-5M12 22V12"/&gt;&lt;/svg&gt;&lt;span class="card-title"&gt;genhttp-modules-api-browsing&lt;/span&gt; &lt;span class="card-text"&gt;Package on Maven Central&lt;/span&gt;&lt;svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"&gt;&lt;path d="M7 17 17 7M8 7h9v9"/&gt;&lt;/svg&gt;&lt;/a&gt;&#10;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;This module adds JavaScript based applications to visualize an Open API&#10;definition such as &lt;a href="https://swagger.io/tools/swagger-ui/" rel="noopener"&gt;Swagger UI&lt;/a&gt;,&#10;&lt;a href="https://redocly.com/" rel="noopener"&gt;Redoc&lt;/a&gt; or &lt;a href="https://scalar.com/" rel="noopener"&gt;Scalar&lt;/a&gt; to your app. All resources required by those&#10;apps are hosted locally so no internet connection is required.&lt;/p&gt;</description></item><item><title>Authentication</title><link>https://genhttp-kt.genhttp.run/documentation/content/concerns/authentication/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://genhttp-kt.genhttp.run/documentation/content/concerns/authentication/</guid><description>&lt;div class="cards"&gt;&#10;&lt;a class="card card-icon" href="https://central.sonatype.com/artifact/org.genhttp/genhttp-modules-authentication" rel="noopener"&gt;&lt;svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"&gt;&lt;path d="m16.5 9.4-9-5.19"/&gt;&lt;path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"/&gt;&lt;path d="M3.29 7 12 12l8.71-5M12 22V12"/&gt;&lt;/svg&gt;&lt;span class="card-title"&gt;genhttp-modules-authentication&lt;/span&gt; &lt;span class="card-text"&gt;Package on Maven Central&lt;/span&gt;&lt;svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"&gt;&lt;path d="M7 17 17 7M8 7h9v9"/&gt;&lt;/svg&gt;&lt;/a&gt;&#10;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;The authentication module allows to restrict access to sections provided&#10;by handlers to authenticated users only. Independent from the kind of authentication&#10;used, the identified user can be read from the request in the following manner:&lt;/p&gt;</description></item><item><title>Client Caching (Policy)</title><link>https://genhttp-kt.genhttp.run/documentation/content/concerns/client-caching-policy/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://genhttp-kt.genhttp.run/documentation/content/concerns/client-caching-policy/</guid><description>&lt;div class="cards"&gt;&#10;&lt;a class="card card-icon" href="https://central.sonatype.com/artifact/org.genhttp/genhttp-modules-client-caching" rel="noopener"&gt;&lt;svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"&gt;&lt;path d="m16.5 9.4-9-5.19"/&gt;&lt;path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"/&gt;&lt;path d="M3.29 7 12 12l8.71-5M12 22V12"/&gt;&lt;/svg&gt;&lt;span class="card-title"&gt;genhttp-modules-client-caching&lt;/span&gt; &lt;span class="card-text"&gt;Package on Maven Central&lt;/span&gt;&lt;svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"&gt;&lt;path d="M7 17 17 7M8 7h9v9"/&gt;&lt;/svg&gt;&lt;/a&gt;&#10;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;This concern allows to instruct clients to cache responses generated&#10;by the server for some duration by adding the &lt;code&gt;Expires&lt;/code&gt; HTTP header.&#10;The following example will cause the static website to be cached for one week:&lt;/p&gt;</description></item><item><title>Client Caching (Validation)</title><link>https://genhttp-kt.genhttp.run/documentation/content/concerns/client-caching-validation/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://genhttp-kt.genhttp.run/documentation/content/concerns/client-caching-validation/</guid><description>&lt;div class="cards"&gt;&#10;&lt;a class="card card-icon" href="https://central.sonatype.com/artifact/org.genhttp/genhttp-modules-client-caching" rel="noopener"&gt;&lt;svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"&gt;&lt;path d="m16.5 9.4-9-5.19"/&gt;&lt;path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"/&gt;&lt;path d="M3.29 7 12 12l8.71-5M12 22V12"/&gt;&lt;/svg&gt;&lt;span class="card-title"&gt;genhttp-modules-client-caching&lt;/span&gt; &lt;span class="card-text"&gt;Package on Maven Central&lt;/span&gt;&lt;svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"&gt;&lt;path d="M7 17 17 7M8 7h9v9"/&gt;&lt;/svg&gt;&lt;/a&gt;&#10;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;This concern adds an &lt;code&gt;ETag&lt;/code&gt; header to every response generated by the server&#10;so that clients send a &lt;code&gt;If-None-Match&lt;/code&gt; header to validate their cache. If the&#10;content did not change on the server, the handler will generate a &lt;code&gt;304 Not Modified&lt;/code&gt;&#10;response, causing the client to re-use the locally cached data. This way, clients&#10;revisiting your web application load faster and the load on your server is reduced.&lt;/p&gt;</description></item><item><title>Compression</title><link>https://genhttp-kt.genhttp.run/documentation/content/concerns/compression/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://genhttp-kt.genhttp.run/documentation/content/concerns/compression/</guid><description>&lt;div class="cards"&gt;&#10;&lt;a class="card card-icon" href="https://central.sonatype.com/artifact/org.genhttp/genhttp-modules-compression" rel="noopener"&gt;&lt;svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"&gt;&lt;path d="m16.5 9.4-9-5.19"/&gt;&lt;path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"/&gt;&lt;path d="M3.29 7 12 12l8.71-5M12 22V12"/&gt;&lt;/svg&gt;&lt;span class="card-title"&gt;genhttp-modules-compression&lt;/span&gt; &lt;span class="card-text"&gt;Package on Maven Central&lt;/span&gt;&lt;svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"&gt;&lt;path d="M7 17 17 7M8 7h9v9"/&gt;&lt;/svg&gt;&lt;/a&gt;&#10;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;The compression concern compresses content sent to the clients, if applicable. By default,&#10;&lt;a href="https://www.gzip.org/" rel="noopener"&gt;gzip&lt;/a&gt;, &lt;a href="https://github.com/google/brotli" rel="noopener"&gt;Brotli&lt;/a&gt; and &lt;a href="https://github.com/facebook/zstd" rel="noopener"&gt;Zstandard&lt;/a&gt; are supported.&lt;/p&gt;</description></item><item><title>Content</title><link>https://genhttp-kt.genhttp.run/documentation/content/handlers/content/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://genhttp-kt.genhttp.run/documentation/content/handlers/content/</guid><description>&lt;div class="cards"&gt;&#10;&lt;a class="card card-icon" href="https://central.sonatype.com/artifact/org.genhttp/genhttp-modules-io" rel="noopener"&gt;&lt;svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"&gt;&lt;path d="m16.5 9.4-9-5.19"/&gt;&lt;path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"/&gt;&lt;path d="M3.29 7 12 12l8.71-5M12 22V12"/&gt;&lt;/svg&gt;&lt;span class="card-title"&gt;genhttp-modules-io&lt;/span&gt; &lt;span class="card-text"&gt;Package on Maven Central&lt;/span&gt;&lt;svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"&gt;&lt;path d="M7 17 17 7M8 7h9v9"/&gt;&lt;/svg&gt;&lt;/a&gt;&#10;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;This handler provides the content of a &lt;a href="../../concepts/resources/"&gt;resource&lt;/a&gt; such&#10;as a file or a text resource to a requesting client. In contrast&#10;to a &lt;a href="../files/#downloads"&gt;download&lt;/a&gt;, the handler does not instruct the&#10;client to download and store the file but just serves it.&lt;/p&gt;</description></item><item><title>CORS</title><link>https://genhttp-kt.genhttp.run/documentation/content/concerns/cors/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://genhttp-kt.genhttp.run/documentation/content/concerns/cors/</guid><description>&lt;div class="cards"&gt;&#10;&lt;a class="card card-icon" href="https://central.sonatype.com/artifact/org.genhttp/genhttp-modules-security" rel="noopener"&gt;&lt;svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"&gt;&lt;path d="m16.5 9.4-9-5.19"/&gt;&lt;path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"/&gt;&lt;path d="M3.29 7 12 12l8.71-5M12 22V12"/&gt;&lt;/svg&gt;&lt;span class="card-title"&gt;genhttp-modules-security&lt;/span&gt; &lt;span class="card-text"&gt;Package on Maven Central&lt;/span&gt;&lt;svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"&gt;&lt;path d="M7 17 17 7M8 7h9v9"/&gt;&lt;/svg&gt;&lt;/a&gt;&#10;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;&lt;a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS" rel="noopener"&gt;Cross-Origin Resource Sharing&lt;/a&gt; allows to control&#10;which resources browsers are allowed to access and how they are allowed to do so. For example, if you would like&#10;to access a webservice from a website hosted on another domain, the browser will&#10;send the &lt;code&gt;Origin&lt;/code&gt; header along with requests to the webservice and analyze the response to determine, whether the server&#10;allows clients to access the resource from this origin.&lt;/p&gt;</description></item><item><title>Decompression</title><link>https://genhttp-kt.genhttp.run/documentation/content/concerns/decompression/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://genhttp-kt.genhttp.run/documentation/content/concerns/decompression/</guid><description>&lt;div class="cards"&gt;&#10;&lt;a class="card card-icon" href="https://central.sonatype.com/artifact/org.genhttp/genhttp-modules-compression" rel="noopener"&gt;&lt;svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"&gt;&lt;path d="m16.5 9.4-9-5.19"/&gt;&lt;path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"/&gt;&lt;path d="M3.29 7 12 12l8.71-5M12 22V12"/&gt;&lt;/svg&gt;&lt;span class="card-title"&gt;genhttp-modules-compression&lt;/span&gt; &lt;span class="card-text"&gt;Package on Maven Central&lt;/span&gt;&lt;svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"&gt;&lt;path d="M7 17 17 7M8 7h9v9"/&gt;&lt;/svg&gt;&lt;/a&gt;&#10;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;This concern will analyze incoming requests for compressed content&#10;and will automatically decompress the body using a suitable decompression&#10;algorithm.&lt;/p&gt;</description></item><item><title>Defaults</title><link>https://genhttp-kt.genhttp.run/documentation/content/concerns/defaults/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://genhttp-kt.genhttp.run/documentation/content/concerns/defaults/</guid><description>&lt;div class="cards"&gt;&#10;&lt;a class="card card-icon" href="https://central.sonatype.com/artifact/org.genhttp/genhttp-modules-practices" rel="noopener"&gt;&lt;svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"&gt;&lt;path d="m16.5 9.4-9-5.19"/&gt;&lt;path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"/&gt;&lt;path d="M3.29 7 12 12l8.71-5M12 22V12"/&gt;&lt;/svg&gt;&lt;span class="card-title"&gt;genhttp-modules-practices&lt;/span&gt; &lt;span class="card-text"&gt;Package on Maven Central&lt;/span&gt;&lt;svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"&gt;&lt;path d="M7 17 17 7M8 7h9v9"/&gt;&lt;/svg&gt;&lt;/a&gt;&#10;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;The &lt;code&gt;defaults()&lt;/code&gt; function provided by the practices&#10;module adds some useful concerns to your web server to enable features such as&#10;&lt;a href="../compression/"&gt;compression&lt;/a&gt; or &lt;a href="../client-caching-validation/"&gt;client side caching&lt;/a&gt;.&#10;This way, you will have a well configured server instance without the need&#10;of adding everything by yourself.&lt;/p&gt;</description></item><item><title>Directory Browsing</title><link>https://genhttp-kt.genhttp.run/documentation/content/handlers/listing/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://genhttp-kt.genhttp.run/documentation/content/handlers/listing/</guid><description>&lt;div class="cards"&gt;&#10;&lt;a class="card card-icon" href="https://central.sonatype.com/artifact/org.genhttp/genhttp-modules-directory-browsing" rel="noopener"&gt;&lt;svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"&gt;&lt;path d="m16.5 9.4-9-5.19"/&gt;&lt;path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"/&gt;&lt;path d="M3.29 7 12 12l8.71-5M12 22V12"/&gt;&lt;/svg&gt;&lt;span class="card-title"&gt;genhttp-modules-directory-browsing&lt;/span&gt; &lt;span class="card-text"&gt;Package on Maven Central&lt;/span&gt;&lt;svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"&gt;&lt;path d="M7 17 17 7M8 7h9v9"/&gt;&lt;/svg&gt;&lt;/a&gt;&#10;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;The directory listing provider serves a simple web UI allowing users to browse directories&#10;and files read from a &lt;a href="../../concepts/resources/"&gt;resource tree&lt;/a&gt; below the specified path.&lt;/p&gt;</description></item><item><title>Error Handling</title><link>https://genhttp-kt.genhttp.run/documentation/content/concerns/error-handling/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://genhttp-kt.genhttp.run/documentation/content/concerns/error-handling/</guid><description>&lt;div class="cards"&gt;&#10;&lt;a class="card card-icon" href="https://central.sonatype.com/artifact/org.genhttp/genhttp-modules-error-handling" rel="noopener"&gt;&lt;svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"&gt;&lt;path d="m16.5 9.4-9-5.19"/&gt;&lt;path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"/&gt;&lt;path d="M3.29 7 12 12l8.71-5M12 22V12"/&gt;&lt;/svg&gt;&lt;span class="card-title"&gt;genhttp-modules-error-handling&lt;/span&gt; &lt;span class="card-text"&gt;Package on Maven Central&lt;/span&gt;&lt;svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"&gt;&lt;path d="M7 17 17 7M8 7h9v9"/&gt;&lt;/svg&gt;&lt;/a&gt;&#10;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;If an exception occurs while a request is handled, the server will render the&#10;exception into a structured response (JSON, XML, &amp;hellip; depending on what the client accepts) via&#10;&lt;code&gt;ErrorHandler.default()&lt;/code&gt;, which is an alias for &lt;code&gt;ErrorHandler.structured()&lt;/code&gt;. To customize the&#10;serialization used, pass a &lt;code&gt;SerializationBuilder&lt;/code&gt; to &lt;code&gt;structured(...)&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Features</title><link>https://genhttp-kt.genhttp.run/features/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://genhttp-kt.genhttp.run/features/</guid><description>&lt;h2 id="frameworks"&gt;Frameworks&lt;a class="anchor" href="#frameworks" aria-label="Link to this section"&gt;&lt;svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"&gt;&lt;path d="M4 9h16M4 15h16M10 3 8 21M16 3l-2 18"/&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;genhttp-kt provides several frameworks to develop and host web services (service classes,&#10;controllers or functional handlers). Additionally, you can easily host static websites or a&#10;single page application. Besides this, the framework comes with a rich set of features:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Automatically generated Open API specifications, with Scalar, Redoc or Swagger UI to browse them&lt;/li&gt;&#10;&lt;li&gt;Various authentication methods (API keys, JWT, client certificates or basic authentication)&lt;/li&gt;&#10;&lt;li&gt;Support for Websockets and Server Sent Events (SSE)&lt;/li&gt;&#10;&lt;li&gt;Automatic response compression (Brotli, Zstandard, gzip) and request decompression&lt;/li&gt;&#10;&lt;li&gt;Client caching directives and automatic ETag handling&lt;/li&gt;&#10;&lt;li&gt;Range support to fetch byte ranges&lt;/li&gt;&#10;&lt;li&gt;Security relevant features, such as CORS policies and an automatic redirection to HTTPS&lt;/li&gt;&#10;&lt;li&gt;JSON, XML, YAML, form and Protobuf serialization, dependency injection with Koin&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;All of them are documented in the &lt;a href="./documentation/content/"&gt;documentation&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Files</title><link>https://genhttp-kt.genhttp.run/documentation/content/handlers/files/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://genhttp-kt.genhttp.run/documentation/content/handlers/files/</guid><description>&lt;div class="cards"&gt;&#10;&lt;a class="card card-icon" href="https://central.sonatype.com/artifact/org.genhttp/genhttp-modules-files" rel="noopener"&gt;&lt;svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"&gt;&lt;path d="m16.5 9.4-9-5.19"/&gt;&lt;path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"/&gt;&lt;path d="M3.29 7 12 12l8.71-5M12 22V12"/&gt;&lt;/svg&gt;&lt;span class="card-title"&gt;genhttp-modules-files&lt;/span&gt; &lt;span class="card-text"&gt;Package on Maven Central&lt;/span&gt;&lt;svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"&gt;&lt;path d="M7 17 17 7M8 7h9v9"/&gt;&lt;/svg&gt;&lt;/a&gt;&#10;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;The Files module serves &lt;a href="../../concepts/resources/"&gt;resources&lt;/a&gt; to clients, either one at a time&#10;with a fixed path or as a whole browsable directory tree. The content type of a file is&#10;automatically determined by its extension unless overridden.&lt;/p&gt;</description></item><item><title>Hardening</title><link>https://genhttp-kt.genhttp.run/documentation/content/concerns/hardening/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://genhttp-kt.genhttp.run/documentation/content/concerns/hardening/</guid><description>&lt;div class="cards"&gt;&#10;&lt;a class="card card-icon" href="https://central.sonatype.com/artifact/org.genhttp/genhttp-modules-security" rel="noopener"&gt;&lt;svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"&gt;&lt;path d="m16.5 9.4-9-5.19"/&gt;&lt;path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"/&gt;&lt;path d="M3.29 7 12 12l8.71-5M12 22V12"/&gt;&lt;/svg&gt;&lt;span class="card-title"&gt;genhttp-modules-security&lt;/span&gt; &lt;span class="card-text"&gt;Package on Maven Central&lt;/span&gt;&lt;svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"&gt;&lt;path d="M7 17 17 7M8 7h9v9"/&gt;&lt;/svg&gt;&lt;/a&gt;&#10;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;Besides &lt;a href="../cors/"&gt;CORS&lt;/a&gt;, the security module provides a few concerns that harden a web&#10;application against common transport-level issues. All three are added automatically by&#10;&lt;a href="../defaults/"&gt;&lt;code&gt;defaults()&lt;/code&gt;&lt;/a&gt; (with &lt;code&gt;preventSniffing&lt;/code&gt; off), or can be added together via&#10;&lt;code&gt;harden()&lt;/code&gt; (which also enables &lt;code&gt;preventSniffing&lt;/code&gt; by default). They are extensions of the host&#10;in the package &lt;code&gt;org.genhttp.modules.security&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Inspection</title><link>https://genhttp-kt.genhttp.run/documentation/content/concerns/inspection/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://genhttp-kt.genhttp.run/documentation/content/concerns/inspection/</guid><description>&lt;div class="cards"&gt;&#10;&lt;a class="card card-icon" href="https://central.sonatype.com/artifact/org.genhttp/genhttp-modules-inspection" rel="noopener"&gt;&lt;svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"&gt;&lt;path d="m16.5 9.4-9-5.19"/&gt;&lt;path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"/&gt;&lt;path d="M3.29 7 12 12l8.71-5M12 22V12"/&gt;&lt;/svg&gt;&lt;span class="card-title"&gt;genhttp-modules-inspection&lt;/span&gt; &lt;span class="card-text"&gt;Package on Maven Central&lt;/span&gt;&lt;svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"&gt;&lt;path d="M7 17 17 7M8 7h9v9"/&gt;&lt;/svg&gt;&lt;/a&gt;&#10;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;When developing client applications, you will sometimes have trouble to understand, why you are getting a&#10;specific response from a webserver. The inspection concern allows you to add the query param &lt;code&gt;?inspect&lt;/code&gt; to any&#10;request and will respond with a detailed summary of how the received request looked like and what response&#10;was generated by the server.&lt;/p&gt;</description></item><item><title>Layouting</title><link>https://genhttp-kt.genhttp.run/documentation/content/handlers/layouting/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://genhttp-kt.genhttp.run/documentation/content/handlers/layouting/</guid><description>&lt;div class="cards"&gt;&#10;&lt;a class="card card-icon" href="https://central.sonatype.com/artifact/org.genhttp/genhttp-modules-layouting" rel="noopener"&gt;&lt;svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"&gt;&lt;path d="m16.5 9.4-9-5.19"/&gt;&lt;path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"/&gt;&lt;path d="M3.29 7 12 12l8.71-5M12 22V12"/&gt;&lt;/svg&gt;&lt;span class="card-title"&gt;genhttp-modules-layouting&lt;/span&gt; &lt;span class="card-text"&gt;Package on Maven Central&lt;/span&gt;&lt;svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"&gt;&lt;path d="M7 17 17 7M8 7h9v9"/&gt;&lt;/svg&gt;&lt;/a&gt;&#10;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;Layouts are a basic mechanism that allows you to assemble your web application from&#10;different parts. They define which URLs are made available by the server and what&#10;the URL structure of your app will look like.&lt;/p&gt;</description></item><item><title>Legal</title><link>https://genhttp-kt.genhttp.run/legal/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://genhttp-kt.genhttp.run/legal/</guid><description>&lt;h2 id="imprint"&gt;Imprint&lt;a class="anchor" href="#imprint" aria-label="Link to this section"&gt;&lt;svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"&gt;&lt;path d="M4 9h16M4 15h16M10 3 8 21M16 3l-2 18"/&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Andreas Nägeli&lt;/p&gt;&#10;&lt;p&gt;Kientzheimer Str. 1, 79238 Ehrenkirchen, Germany&lt;/p&gt;&#10;&lt;p&gt;&lt;a href="mailto:solutions@genhttp.org"&gt;solutions@genhttp.org&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;If you would like to report a bug or ask a question, please visit&#10;&lt;a href="https://github.com/Kaliumhexacyanoferrat/genhttp-kt/issues" rel="noopener"&gt;our GitHub page&lt;/a&gt;.&lt;/p&gt;&#10;&lt;h2 id="data-privacy"&gt;Data Privacy&lt;a class="anchor" href="#data-privacy" aria-label="Link to this section"&gt;&lt;svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"&gt;&lt;path d="M4 9h16M4 15h16M10 3 8 21M16 3l-2 18"/&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;This website is intended to provide information about the genhttp-kt project. Personal data and&#10;cookies are not required for this, but your IP address is logged by the server for the purpose of&#10;technical operation with every request sent by your browser. This information will reside on the&#10;server until it is restarted. Besides this, no other personal data will be collected.&lt;/p&gt;</description></item><item><title>Load Balancer</title><link>https://genhttp-kt.genhttp.run/documentation/content/handlers/load-balancer/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://genhttp-kt.genhttp.run/documentation/content/handlers/load-balancer/</guid><description>&lt;div class="cards"&gt;&#10;&lt;a class="card card-icon" href="https://central.sonatype.com/artifact/org.genhttp/genhttp-modules-load-balancing" rel="noopener"&gt;&lt;svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"&gt;&lt;path d="m16.5 9.4-9-5.19"/&gt;&lt;path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"/&gt;&lt;path d="M3.29 7 12 12l8.71-5M12 22V12"/&gt;&lt;/svg&gt;&lt;span class="card-title"&gt;genhttp-modules-load-balancing&lt;/span&gt; &lt;span class="card-text"&gt;Package on Maven Central&lt;/span&gt;&lt;svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"&gt;&lt;path d="M7 17 17 7M8 7h9v9"/&gt;&lt;/svg&gt;&lt;/a&gt;&#10;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;Allows to distribute incoming requests to multiple nodes, either by using&#10;a &lt;a href="../reverse-proxy/"&gt;reverse proxy&lt;/a&gt; or by redirecting the client.&lt;/p&gt;</description></item><item><title>Localization</title><link>https://genhttp-kt.genhttp.run/documentation/content/concerns/localization/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://genhttp-kt.genhttp.run/documentation/content/concerns/localization/</guid><description>&lt;div class="cards"&gt;&#10;&lt;a class="card card-icon" href="https://central.sonatype.com/artifact/org.genhttp/genhttp-modules-i18n" rel="noopener"&gt;&lt;svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"&gt;&lt;path d="m16.5 9.4-9-5.19"/&gt;&lt;path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"/&gt;&lt;path d="M3.29 7 12 12l8.71-5M12 22V12"/&gt;&lt;/svg&gt;&lt;span class="card-title"&gt;genhttp-modules-i18n&lt;/span&gt; &lt;span class="card-text"&gt;Package on Maven Central&lt;/span&gt;&lt;svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"&gt;&lt;path d="M7 17 17 7M8 7h9v9"/&gt;&lt;/svg&gt;&lt;/a&gt;&#10;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;The localization concern analyzes incoming requests for&#10;language preferences and allows the application logic to&#10;serve content based on those.&lt;/p&gt;</description></item><item><title>Open API</title><link>https://genhttp-kt.genhttp.run/documentation/content/concerns/open-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://genhttp-kt.genhttp.run/documentation/content/concerns/open-api/</guid><description>&lt;div class="cards"&gt;&#10;&lt;a class="card card-icon" href="https://central.sonatype.com/artifact/org.genhttp/genhttp-modules-open-api" rel="noopener"&gt;&lt;svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"&gt;&lt;path d="m16.5 9.4-9-5.19"/&gt;&lt;path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"/&gt;&lt;path d="M3.29 7 12 12l8.71-5M12 22V12"/&gt;&lt;/svg&gt;&lt;span class="card-title"&gt;genhttp-modules-open-api&lt;/span&gt; &lt;span class="card-text"&gt;Package on Maven Central&lt;/span&gt;&lt;svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"&gt;&lt;path d="M7 17 17 7M8 7h9v9"/&gt;&lt;/svg&gt;&lt;/a&gt;&#10;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;This concern dynamically generates and serves an &lt;a href="https://github.com/OAI/OpenAPI-Specification" rel="noopener"&gt;Open API v3 specification&lt;/a&gt; using&#10;&lt;a href="https://github.com/swagger-api/swagger-core" rel="noopener"&gt;swagger-core&lt;/a&gt; for all detected API endpoints.&lt;/p&gt;</description></item><item><title>Pages</title><link>https://genhttp-kt.genhttp.run/documentation/content/handlers/pages/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://genhttp-kt.genhttp.run/documentation/content/handlers/pages/</guid><description>&lt;div class="cards"&gt;&#10;&lt;a class="card card-icon" href="https://central.sonatype.com/artifact/org.genhttp/genhttp-modules-pages" rel="noopener"&gt;&lt;svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"&gt;&lt;path d="m16.5 9.4-9-5.19"/&gt;&lt;path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"/&gt;&lt;path d="M3.29 7 12 12l8.71-5M12 22V12"/&gt;&lt;/svg&gt;&lt;span class="card-title"&gt;genhttp-modules-pages&lt;/span&gt; &lt;span class="card-text"&gt;Package on Maven Central&lt;/span&gt;&lt;svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"&gt;&lt;path d="M7 17 17 7M8 7h9v9"/&gt;&lt;/svg&gt;&lt;/a&gt;&#10;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;The pages module allows the server to generate HTML pages (e.g. error messages or the directory listing) and can be&#10;used to render custom pages from a template, using &lt;a href="https://pebbletemplates.io/" rel="noopener"&gt;Pebble&lt;/a&gt; as a rendering engine. Support&#10;for rendering websites in genhttp-kt is minimalistic, so you should not use this for a website project.&lt;/p&gt;</description></item><item><title>Range Support</title><link>https://genhttp-kt.genhttp.run/documentation/content/concerns/range-support/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://genhttp-kt.genhttp.run/documentation/content/concerns/range-support/</guid><description>&lt;div class="cards"&gt;&#10;&lt;a class="card card-icon" href="https://central.sonatype.com/artifact/org.genhttp/genhttp-modules-io" rel="noopener"&gt;&lt;svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"&gt;&lt;path d="m16.5 9.4-9-5.19"/&gt;&lt;path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"/&gt;&lt;path d="M3.29 7 12 12l8.71-5M12 22V12"/&gt;&lt;/svg&gt;&lt;span class="card-title"&gt;genhttp-modules-io&lt;/span&gt; &lt;span class="card-text"&gt;Package on Maven Central&lt;/span&gt;&lt;svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"&gt;&lt;path d="M7 17 17 7M8 7h9v9"/&gt;&lt;/svg&gt;&lt;/a&gt;&#10;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;Partial responses allow clients to fetch a specified portion of&#10;a requested resource which can be helpful for download managers&#10;to pause and resume downloads. As this functionality is not&#10;needed by every web application, &lt;a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Range_requests" rel="noopener"&gt;range support&lt;/a&gt; is&#10;disabled by default.&lt;/p&gt;</description></item><item><title>Redirects</title><link>https://genhttp-kt.genhttp.run/documentation/content/handlers/redirects/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://genhttp-kt.genhttp.run/documentation/content/handlers/redirects/</guid><description>&lt;div class="cards"&gt;&#10;&lt;a class="card card-icon" href="https://central.sonatype.com/artifact/org.genhttp/genhttp-modules-redirects" rel="noopener"&gt;&lt;svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"&gt;&lt;path d="m16.5 9.4-9-5.19"/&gt;&lt;path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"/&gt;&lt;path d="M3.29 7 12 12l8.71-5M12 22V12"/&gt;&lt;/svg&gt;&lt;span class="card-title"&gt;genhttp-modules-redirects&lt;/span&gt; &lt;span class="card-text"&gt;Package on Maven Central&lt;/span&gt;&lt;svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"&gt;&lt;path d="M7 17 17 7M8 7h9v9"/&gt;&lt;/svg&gt;&lt;/a&gt;&#10;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;The redirect provider allows to inform the client that the location of the actual resource&#10;is different than the requested URI.&lt;/p&gt;</description></item><item><title>Reverse Proxies</title><link>https://genhttp-kt.genhttp.run/documentation/content/handlers/reverse-proxy/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://genhttp-kt.genhttp.run/documentation/content/handlers/reverse-proxy/</guid><description>&lt;div class="cards"&gt;&#10;&lt;a class="card card-icon" href="https://central.sonatype.com/artifact/org.genhttp/genhttp-modules-reverse-proxy" rel="noopener"&gt;&lt;svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"&gt;&lt;path d="m16.5 9.4-9-5.19"/&gt;&lt;path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"/&gt;&lt;path d="M3.29 7 12 12l8.71-5M12 22V12"/&gt;&lt;/svg&gt;&lt;span class="card-title"&gt;genhttp-modules-reverse-proxy&lt;/span&gt; &lt;span class="card-text"&gt;Package on Maven Central&lt;/span&gt;&lt;svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"&gt;&lt;path d="M7 17 17 7M8 7h9v9"/&gt;&lt;/svg&gt;&lt;/a&gt;&#10;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;The reverse proxy content provider allows to embed content from another&#10;web server into your application.&lt;/p&gt;</description></item><item><title>Server Sent Events (SSE)</title><link>https://genhttp-kt.genhttp.run/documentation/content/handlers/server-sent-events/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://genhttp-kt.genhttp.run/documentation/content/handlers/server-sent-events/</guid><description>&lt;div class="cards"&gt;&#10;&lt;a class="card card-icon" href="https://central.sonatype.com/artifact/org.genhttp/genhttp-modules-server-sent-events" rel="noopener"&gt;&lt;svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"&gt;&lt;path d="m16.5 9.4-9-5.19"/&gt;&lt;path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"/&gt;&lt;path d="M3.29 7 12 12l8.71-5M12 22V12"/&gt;&lt;/svg&gt;&lt;span class="card-title"&gt;genhttp-modules-server-sent-events&lt;/span&gt; &lt;span class="card-text"&gt;Package on Maven Central&lt;/span&gt;&lt;svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"&gt;&lt;path d="M7 17 17 7M8 7h9v9"/&gt;&lt;/svg&gt;&lt;/a&gt;&#10;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;&lt;a href="https://html.spec.whatwg.org/multipage/server-sent-events.html#server-sent-events" rel="noopener"&gt;Server Sent Events (SSE)&lt;/a&gt; allow client applications such as&#10;browsers to subscribe to a stream of relevant events without the overhead added by the bi-directional connection&#10;of websockets. Therefore, they are useful whenever the server would like to notify the client about changes. This article&#10;describes how to host an event source in Kotlin using genhttp-kt.&lt;/p&gt;</description></item><item><title>Support</title><link>https://genhttp-kt.genhttp.run/support/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://genhttp-kt.genhttp.run/support/</guid><description>&lt;h2 id="getting-support"&gt;Getting Support&lt;a class="anchor" href="#getting-support" aria-label="Link to this section"&gt;&lt;svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"&gt;&lt;path d="M4 9h16M4 15h16M10 3 8 21M16 3l-2 18"/&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;If you have questions or run into issues while building applications with genhttp-kt,&#10;the community is here to help. You can reach us through:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="https://github.com/Kaliumhexacyanoferrat/genhttp-kt/issues" rel="noopener"&gt;GitHub&lt;/a&gt; for issues specific&#10;to genhttp-kt&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://github.com/Kaliumhexacyanoferrat/GenHTTP" rel="noopener"&gt;GitHub&lt;/a&gt; discussions and issue tracking&#10;for everything around the framework itself&lt;/li&gt;&#10;&lt;li&gt;The community &lt;a href="https://discord.gg/PRkwKrnrB4" rel="noopener"&gt;Discord channel&lt;/a&gt; of GenHTTP&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Both platforms are actively monitored and are great places to get guidance, report problems,&#10;or exchange ideas with other users. As genhttp-kt follows GenHTTP, a feature or a change of&#10;behavior is proposed for GenHTTP first and reaches genhttp-kt with the next sync.&lt;/p&gt;</description></item><item><title>Virtual Hosts</title><link>https://genhttp-kt.genhttp.run/documentation/content/handlers/virtual-hosts/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://genhttp-kt.genhttp.run/documentation/content/handlers/virtual-hosts/</guid><description>&lt;div class="cards"&gt;&#10;&lt;a class="card card-icon" href="https://central.sonatype.com/artifact/org.genhttp/genhttp-modules-virtual-hosting" rel="noopener"&gt;&lt;svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"&gt;&lt;path d="m16.5 9.4-9-5.19"/&gt;&lt;path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"/&gt;&lt;path d="M3.29 7 12 12l8.71-5M12 22V12"/&gt;&lt;/svg&gt;&lt;span class="card-title"&gt;genhttp-modules-virtual-hosting&lt;/span&gt; &lt;span class="card-text"&gt;Package on Maven Central&lt;/span&gt;&lt;svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"&gt;&lt;path d="M7 17 17 7M8 7h9v9"/&gt;&lt;/svg&gt;&lt;/a&gt;&#10;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;The virtual host handler can be used to deliver different content&#10;depending on the host requested by the client. Note, that the&#10;handler can be used anywhere in the handler chain, but usually it is&#10;most beneficial as the main handler.&lt;/p&gt;</description></item></channel></rss>