Published 19 April 2023
Features
- Support loading multiple configuration files (KTOR-5658)
- Static files filters or something similar to mod_rewrite (KTOR-818)
- Built-in support for HEAD requests for static files (KTOR-4052)
- Ability to set Content-Type of static resource (KTOR-2312)
- Support regex patterns in routing (KTOR-5110)
- Support Flow in ktor-serialization (KTOR-3788)
- Upgrade Client Apache Engine Version to use Apache 5 (KTOR-4547)
- Support for CURLOPT_CAINFO and CURLOPT_CAPATH in ktor-client-curl (KTOR-5614)
- Allow passing multiple acceptable content types to accept route selector (KTOR-419)
- Support
100 Continue
(KTOR-829)
Improvements
- The '425 Too Early' status code is missing in the HttpStatusCode enum (KTOR-4673)
- Feature request: SO_REUSEADDR option for embedded server (KTOR-5529)
- Add opportunity to pass type info into WebSockets serializing methods (KTOR-5740)
- Ktor JS websocket client unconfigurable logging (KTOR-5456)
- Update JTE to 2.3.0 (KTOR-5698)
- Update Kotlin to 1.8.10 (KTOR-5544)
- Migrate to the new Kotlin JS IR backend (KTOR-5543)
- Prefer Node instead of browser behavior (KTOR-5650)
- Update reported dependencies (KTOR-5662)
- AutoHead should dispose response body (KTOR-5684)
- Add
append(String, List<String>)
overload toFormBuilder
(KTOR-5493) - Support serving static files from resources in GraalVM native image (KTOR-5580)
- Comparable HttpStatusCode (KTOR-5629)
- Support preCompressed with resources (KTOR-2677)
- Add shutdown configuration for engine in stop method (KTOR-5560)
- Logging: Add filter/sanitization of sensitive headers (KTOR-5523)
- Add resource route builders accepting typed body as second parameter (KTOR-5589)
- CallLogging: add config to avoid logging static file request (KTOR-5474)
- Update Tomcat to 10 (KTOR-5266)
- Update Jetty to version 11 (KTOR-5267)
- Update Parameters and Headers DSL to be consistent with stdlib (KTOR-627)
- Consider quoting
Boolean
during construction of multipart requests (KTOR-5405) - Simplify Static Content Plugin (KTOR-5265)
Bugfixes
- Websockets: connection should be failed immediately when no continuation frame goes after a fragmented text frame (KTOR-5018)
- Websockets: Connection should be failed immediately, since all data frames after the initial data frame must have opcode 0 (KTOR-5014)
- Websockets: Connection should fail immediately (1002/Protocol Error) when control frame has a payload with more than 125 octets (KTOR-5006)
- Java engine: Websockets client sends two PONG frames for each PING frame from a server (KTOR-5653)
- Websockets: Erroneous trace log about expired websocket pings (KTOR-5672)
- DarwinClientEngine: a request deadlocks on macOS since 2.2.2 (KTOR-5502)
- Requests don't match in nested Regex Routing (KTOR-5750)
- IllegalArgumentException in Regex Routing (KTOR-5748)
- Unneeded escaping in Regex Routing isn't processed (KTOR-5746)
- Native: Read from a closed socket doesn't throw an exception (KTOR-5093)
- Reading response of HEAD request breaks when Content-Length > 0 (KTOR-5699)
- "Serializer for class 'Any' is not found" error when responding with Any type since Ktor 2.2.4 (KTOR-5687)
- BearerAuthProvider: Token is being refreshed multiple times when queued call finishes with 401 after refresh token succeeds (KTOR-5681)
- CIO: nmap crashes server with "SocketException: Invalid argument" error (KTOR-5636)
- DigestAuthProvider: realm sent from the server doesn't participate in the computation of
response
(KTOR-4514) - OAuth2: "JsonObject is not a JsonPrimitive" error when server replies with nested JSON object on a token request (KTOR-5669)
- CallLogging: logs caused by an exception are suppressed when mdc provider is configured (KTOR-5665)
- Metrics: ClassCastException when the DropwizardMetrics plugin is installed after the MicrometerMetrics plugin (KTOR-5595)
- ByteBufferChannel throws exception when HttpCache, ContentEncoding and onDownload are used (KTOR-5532)
- runBlocking in TestApplicationEngine loses coroutineContext (KTOR-5525)
- Incorrect handling of private cache directive in HttpCachePlugin (KTOR-5570)
- The default implementation of challengeFunction is empty, causing no session users to access protected resources (KTOR-5467)
- Wrong ContentType for .mjs files (KTOR-5533)
- Non-standard
Content-Type
headers for static files (KTOR-5311) - CIO: Client fails to parse response without Content-Length, Connection headers and chunked transfer encoding (KTOR-5327)
- Conflict between
ContentNegotiation
andMustache
plugins (KTOR-5337)