Releases: ktorio/ktor
Releases · ktorio/ktor
2.3.6
Published 7 November 2023
Bugfixes
- Resolved connectors job does not complete in TestApplicationEngine (KTOR-6411)
- Darwin: Even a coroutine Job is canceled network load keeps high (KTOR-6243)
- Darwin: EOFException when sending multipart data using Ktor 2.3.4 (KTOR-6281)
- Ktor JS client unconfigurable logging in node (KTOR-6275)
- CIO: getEngineHeaderValues() returns duplicated values (KTOR-6352)
- "Server sent a subprotocol but none was requested" when using Node WebSockets (KTOR-4001)
- YAML properties with literal value null cannot be read since 2.3.1 (KTOR-6357)
- AndroidClientEngine cannot handle content length that exceeds Int range (KTOR-6344)
- Client unable to make subsequent requests after the network disconnection and connection when ResponseObserver is installed (KTOR-6252)
- Outdated Gradle jib plubin does not support application/vnd.oci.image.index.v1+json media type (KTOR-6280)
- KTor 2.3.5 Kotlin 1.9.x upgrade is a breaking change (KTOR-6354)
- WebSockets (CIO): Connection Failure Due to Lowercase 'upgrade' in 'Connection: upgrade' Header (KTOR-6388)
- WinHttp: ArrayIndexOutOfBoundsException when sending WS frame with empty body (KTOR-6394)
- Update dependency com.auth0:jwks-rsa to v0.22.1
2.3.5
2.3.4
Published 31 August 2023
Bugfixes
- The "charset=UTF-8" part is automatically added to the
application/json
Content-Type (KTOR-6183) - MicrometerMetricsConfig default registry leaks coroutine (KTOR-6178)
- Darwin: App hangs when sending a huge MultiPart request without access to network (KTOR-6147)
- NPE in JavaClientEngine body() call (KTOR-6190)
- Digest Auth: algorithm isn't specified in the Authorization header (KTOR-3391)
- Confusing NoTransformationFoundException (KTOR-6064)
- Cookie name-value pairs should be separated by a semicolon instead of a comma (KTOR-5868)
2.3.3
Published 1 August 2023
Bugfixes
- java.util.zip.DataFormatException after enabling permessage-deflate (KTOR-5979)
- DelegatingTestingClientEngine fails when ContentNegotiation with protobuf is installed and empty body (KTOR-6125)
- KtorServlet does not support yaml configuration (KTOR-6108)
- CIO ConnectionFactory leaks on cancellation (KTOR-6127)
- staticFiles responds twice if both index and defaultPath are set (KTOR-6120)
- Uncaught Kotlin exception: kotlin.IllegalArgumentException: Failed to open iconv for charset UTF-8 with error code 22 (KTOR-5980)
- Not compatible with kotlinx-html 0.9.1 (KTOR-6124)
- "Test engine is already completed" error while establishing Websockets connection (KTOR-6057)
- s-maxage is not used, even if
HttpCache.Config.isShared
is true (KTOR-6087) - Cache returns null when vary header set different ways whatever it has same values (KTOR-6081)
- DefaultRequest: a cookie appears twice in the request header when sending a request with another cookie (KTOR-5619)
Improvements
2.3.2
Published 28 June 2023
Bugfixes
- Linking release build leads to compilation error with coroutines of version 1.7.0-Beta (KTOR-5728)
- MapApplicationConfig removes deeply nested properties when converting to a map (KTOR-6013)
- Cache returns null when vary header has more fields in the cached response (KTOR-6001)
- ContentType of a response body isn't set inside OkHttp's interceptor when a form request is sent (KTOR-5971)
Improvements
2.3.1
Published 31 May 2023
Bugfixes
- AndroidClientEngine: the engine double-parses query parameters before sending a request (KTOR-5814)
- Flaky tests in WinHttp engine (KTOR-5946)
- Electron/Node.js detection doesn't work correctly (KTOR-5906)
- Curl sometimes fails with
API function called from within callback
(KTOR-5918) - Bearer auth token refresh hangs after prior refresh threw an exception (KTOR-5879)
- HOCON: "No configuration setting found for key" error after merging (KTOR-5895)
- Ktor Client Unable to Stream Responses in Javascript (KTOR-5867)
- Darwin engine does not support streaming of request body (KTOR-5899)
- The Logging plugin doesn't log full kotlinx deserialization errors (KTOR-5421)
- XForwardedHeaders should set
remoteAddress
in addition toremoteHost
(KTOR-5786) - Sessions: Set-Cookie is added on every api request (KTOR-912)
- RateLimitters for every request key live in memory forever (KTOR-5872)
- Significant delay between getting a part and starting reading from its provider for multipart/form-data requests (KTOR-5248)
- getTimeMillis has seconds precision on native (KTOR-5878)
- A coroutine closed due to cancellation is considered by the JsWebSocketSession to be closed on failure (KTOR-2932)
- WebSockets: requests to a non-existing route cause server to lock up after responding with 404 (potential DOS) (KTOR-5829)
- testApplication: NPE when test server doesn't reply with an HTTP upgrade (KTOR-5815)
- GMTDate timestamp doesn't reflect timezone when created using
Calendar.toDate
method (KTOR-5813)
Improvements
- Warn when the RateLimit plugin installed after the routing (KTOR-5915)
- Allow access to RateLimiters related to call (KTOR-5876)
- Multipart: Support not writing a temporary file for binary data (KTOR-5864)
- Make System Property to Set outgoingToBeProcessed Size for WebSockets (KTOR-5855)
- Support optional properties in YAML (KTOR-5796)
- YAML config does not support reading variables from itself (KTOR-5797)
2.3.0
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)
2.2.4
Published 28 February 2023
Bugfixes
- Connect timeout is not respected when using the HttpRequestRetry plugin (KTOR-5466)
- URLs with underscore fail to parse correctly in HTTP client request (KTOR-5591)
- Routing: Wrong content-type results in 405 instead of 415 status code with two routes (KTOR-5535)
- Compressing the response will result in unexpected ERROR log output after processing in the StatusPages (KTOR-5510)
- Javadoc for Resources.kt cannot be compiled (KTOR-5492)
- ContentNegotiation: The "charset=UTF-8" part is added for the Content-Type header (KTOR-3799)
- kotlinx.serialization.SerializationException is lost for the classes that have generic type parameters (KTOR-5448)
- OkHttp: Cancelling while writing to ByteWriteChannel when overriding WriteChannelContent causes propagation of CancellationException to a caller (KTOR-5518)
2.2.3
Published 31 January 2023
Improvements
- ContentNegotiation: "Skipping because the type is ignored" log message is unclear (KTOR-5479)
- Make OAuth2 functionality multiplatform (KTOR-1144)
- Log HTTP request time (KTOR-1250)
- Add Client Plugins Trace Logging (KTOR-5264)
Bugfixes
- FileStorage throws java.io.FileNotFoundException (File name too long) when request path is long (KTOR-5443)
- HttpRequestRetry retries on FileNotFoundException thrown by FileStorage (KTOR-5444)
- DropwizardMetricsPlugin logs status code incorrectly when is used together with StatusPages plugin (KTOR-5420)
- Server ContentNegotiation no longer allows multiple decoders for one Content-Type (KTOR-5410)
- Multipart File doesn't upload whole file, throws "Unexpected EOF: expected 4096 more bytes" for larger files (KTOR-3455)
- Netty: Unable to set the
tcpKeepAlive
(KTOR-5370) - HOCON: CLI parameters don't override custom array properties since 2.1.0 (KTOR-5100)
2.2.2
Published 3 January 2023
Improvements
- Resource annotation should be MetaSerializable (KTOR-5397)
- The swaggerUI method is too restrictive and cannot be called inside a route (KTOR-5307)
- Engine shutdown grace period and timeout are not configurable (KTOR-5359)
- Allow specifying immutable in CacheControl (KTOR-3757)
Bugfixes
- Server cannot be started with the Swagger plugin (KTOR-5308)
- Regression in 2.2.1: Got EOF but at least 0 bytes were expected (5372)
- HttpRequestRetry: Memory leak of coroutines objects when using the plugin (KTOR-5099)
- iOS unit test deadlocks with DarwinClientEngine (KTOR-5332)
- Gzip encoding: IllegalStateException: Expected 112, actual 113 (KTOR-5300)
- Netty, HSTS: UnsupportedOperationException is thrown when the server responds before HSTS plugin (KTOR-5276)