Skip to content

Releases: ktorio/ktor

2.3.6

07 Nov 13:22
Compare
Choose a tag to compare

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

05 Oct 15:08
c751ca8
Compare
Choose a tag to compare

Published 5 October 2023

Bugfixes

  • 300+ ktor-client-java threads eat up lots of memory (KTOR-6292)
  • Apache5 engine limits concurrent requests to individual route to 5 (KTOR-6221)
  • DarwinClientEngine WebSocket rejects all received pongs (KTOR-5540)

2.3.4

01 Sep 06:07
32b9395
Compare
Choose a tag to compare

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

02 Aug 09:00
0734151
Compare
Choose a tag to compare

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

  • Drop linuxArm64 publication from ktor-client-curl (KTOR-6154)
  • Client: Target linuxArm64 (KTOR-872)
  • Server: Target linuxArm64 (KTOR-5753)
  • Add system property to disable automatic installation of runtime shutdown hook (KTOR-6070)

2.3.2

29 Jun 09:07
9ad4da0
Compare
Choose a tag to compare

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

  • Update Kotlin to 1.8.22 (KTOR-6053)
  • The error message is not helpful when authenticating with a bearer header with a colon (KTOR-5409)

2.3.1

01 Jun 13:46
593e9b5
Compare
Choose a tag to compare

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 to remoteHost (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

19 Apr 17:42
Compare
Choose a tag to compare

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 to FormBuilder (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 and Mustache plugins (KTOR-5337)

2.2.4

28 Feb 13:36
0132c94
Compare
Choose a tag to compare

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

01 Feb 08:58
6e35be2
Compare
Choose a tag to compare

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

04 Jan 09:34
2886330
Compare
Choose a tag to compare

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)