Skip to content

Releases: ktorio/ktor

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)

2.2.1

08 Dec 07:32
7c9d3e1
Compare
Choose a tag to compare

Published 7 December 2022

The critical error java.lang.NoClassDefFoundError: kotlinx/atomicfu/AtomicFU in the 2.2.0 release is fixed

2.2.0

07 Dec 17:43
a411727
Compare
Choose a tag to compare

Published 7 December 2022

  • Intergate Swagger UI Hosting as Ktor Feature (KTOR-774)
  • New plugins API for client (KTOR-5161)
  • Rate-Limit Support on Server (KTOR-1196)
  • Make sessions plugin multiplatform (KTOR-4960)
  • Add the ability to access the route inside a route-scoped plugin (KTOR-5112)
  • Add a method that returns a list of child routes recursively (KTOR-581)
  • Support Default Value for missing Env Variables in YAML (KTOR-5283)
  • Netty: ApplicationStarted event is fired before the server starts accepting connections (KTOR-4259)
  • parseAuthorizationHeader throws ParseException on header value with multiple challenges (KTOR-5216)
  • ByteChannel exception: Got EOF but at least 1 byte were expected (KTOR-5252)
  • Application data in OAuth State parameter (KTOR-5225)
  • NativePRNGNonBlocking is not found, fallback to SHA1PRNG (KTOR-668)
  • Not calling call.respond() at server results in 404 for the client (KTOR-721)
  • Restoring thread context elements when directly resuming to parent is broken (KTOR-2644)
  • Out of the box ContentConverter for Protobuf (KTOR-763)
  • Darwin: response is never returned when usePreconfiguredSession is used (KTOR-5134)
  • List.merge() should have reversed priority (KTOR-5208)
  • Allow nested authentications to be combined using AND (KTOR-5021)
  • The swaggerUI plugin should be placed in the io.ktor.server.plugins.swagger package (KTOR-5192)
  • CORS Plugin should log reason for returning 403 Forbidden errors (KTOR-4236)
  • The default path to an OpenAPI specification doesn't work for the 'openAPI' plugin (KTOR-5193)
  • JWT: JWTPayloadHolder.getListClaim() throws NPE when specified claim is absent (KTOR-5098)
  • Logging: the plugin instantiates the default logger even when a custom one is provided (KTOR-5186)
  • Java client engine doesn't handle HttpTimeout.INFINITE_TIMEOUT_MS properly (KTOR-2814)
  • SessionTransportTransformerMessageAuthentication: Comparison of digests fails when there is a space in a value (KTOR-5168)
  • Support serving OpenAPI from resources (KTOR-5150)
  • Remove check for internal class in Select (KTOR-5035)
  • Persistent Client HttpCache (KTOR-2579)
  • Support native windows HTTP client (KTOR-735)
  • Add Server BearerAuthenticationProvider (KTOR-5118)
  • Merged config: "Property *.size not found" error when calling configList method on an array property (KTOR-5143)
  • "POSIX error 56: Socket is already connected" error when a socket is connection-mode on Darwin targets (KTOR-4877)
  • StatusPages can't handle errors in HTML template (KTOR-5107)
  • HttpRequestRetry: Memory leak of coroutines objects when using the plugin (KTOR-5099)
  • CallLogging and CallId: exceptions thrown in WriteChannelContent.writeTo are swallowed (KTOR-4954)
  • Temp files generated by multipart upload are not cleared in case of exception or cancellation (KTOR-5051)
  • Websockets, Darwin: trusting a certificate via handleChallenge doesn't work for Websockets connections (KTOR-5094)
  • Digest auth: Support returning any objects which implement Principal interface (KTOR-5059)
  • Add Debug Logging to Default Transformers (KTOR-4529)
  • No way getting client's source address from IP packet (KTOR-2501)
  • Add Env Variable to Change Log Level on Native Server (KTOR-4998)
  • Add Debug Logging for Ktor Plugins and Routing (KTOR-4510)
  • Add Debug Logging to ContentNegotiation (KTOR-4518)
  • Add Debug Logging to Routing (KTOR-4524)
  • Add Debug Logging to Auth Plugin (KTOR-4519)
  • Add Debug Logging to Status Pages Plugin (KTOR-4527)
  • Add Debug Logging to PartialContent Plugin (KTOR-4525)
  • Add Debug Logging to Sessions Plugin (KTOR-4526)
  • Add Debug Logging to Call Id (KTOR-4520)
  • Add Debug Logging to WebSockets Plugin (KTOR-4528)
  • Add Debug Logging to Double Receive Plugin (KTOR-4530)
  • Add Debug Logging to Compression Plugin (KTOR-4521)
  • Make certificate generation helpers more flexible (KTOR-5023)
  • Jackson converter: Support requests with Content-Length header (KTOR-4904)
  • Add a way to get a client's port (KTOR-430)
  • Retry and timeout client plugins don't work together (KTOR-4652)
  • Server Session - Switch to Kotlinx serialization (KTOR-2572)
  • ApplicationCall.respondRedirect should have overload for Url (KTOR-1538)
  • Make API to Use Configuration in Application Plugins (KTOR-4533)
  • Way to block use of TLS 1.0/1.1 when using Ktor/Netty (KTOR-4587)
  • testApplication: application initialization block isn't eagerly called (KTOR-4819)
  • testApplication: test server lifecycle management (KTOR-4773)
  • The beginning character of encodedPath field(Url class) is wrong when relative path (KTOR-621)
  • Unable to access userPrincipal of servletRequest in ktor-server-servlet (KTOR-4784)
  • When unable to get JWKS, JWTAuth swallows the underlying exception and only logs the last message (KTOR-636)
  • CIO Server generates wrong URL for OAuth URL provider using Locations (KTOR-2143)
  • Inconsistency among server engines when determining port/host of an incoming request (KTOR-4141)
  • Update Versions of Dependencies (KTOR-5293)

2.1.3

28 Oct 16:46
46d4762
Compare
Choose a tag to compare

Published 26 October 2022

  • JS: window.location.origin returns null when executed in iframe via srcdoc attribute (KTOR-4993)
  • SensitivityWatchEventModifier - Move the reflection call of this modifier out from the Ktor Core (KTOR-1647)
  • "java.lang.IllegalArgumentException: Failed requirement." in SelectorManagerSupport (KTOR-2914)
  • HOCON: CLI parameters don't override custom properties since 2.1.0 (KTOR-5000)
  • Websockets timeout doesn't cause a close of a connection (KTOR-3504)
  • DefaultHeaders: a header is duplicated in a StatusPages's handler (KTOR-4990)
  • Websockets: timeout doesn't cause closing of incoming and outgoing channels (KTOR-2430)
  • RFC 3986 recommendation for encoding URI is NOT followed (KTOR-993)
  • Cookies: Invalid encoding of cookies' values since 1.4.0 (KTOR-917)
  • ByteReadChannel is unable to read files with long lines (KTOR-2588)
  • WebSocketDeflateExtension configureProtocols always failed with stackOverflow (KTOR-4916)
  • Update Kotlin to 1.7.20 (KTOR-4963)
  • Netty HTTP/2: response headers contain ":status" header and that leads to IllegalHeaderNameException in the ConditionalHeaders plugin (KTOR-4943)
  • Maven: ktor-server-test-host-jvm causes dependency error starting from Ktor 2.0.3 (KTOR-4900)
  • Autoreloading: "Flow invariant is violated" error since Ktor 2.0.3 (KTOR-4926)
  • Autoreloading: ClassCastException when retrieving plugins in testApplication (KTOR-4729)
  • CIO engine has wrong doc for request timeout (KTOR-4941)
  • CIO: A request through a proxy server results in 403 from Cloudflare (KTOR-4925)

2.1.2

30 Sep 08:56
dc9b02a
Compare
Choose a tag to compare

Published 29 September 2022

  • HttpCacheEntry ignoring Request Cache-Control directives (KTOR-4894)
  • testApplication does not handle port and connectors (KTOR-4875)
  • Native: Wrong status code when requesting with DELETE method and body (KTOR-3566)
  • Default host address 0.0.0.0 isn't reachable on Windows (KTOR-4834)
  • TestApplicationEngine error handling is inconsistent with DefaultEnginePipeline, breaking clients (KTOR-4009)
  • Routing: Wrong content-type results in 400 Bad Request instead of 415 Unsupported Media type (KTOR-4849)

2.1.1

06 Sep 19:03
106029b
Compare
Choose a tag to compare

Published 6 September 2022

  • CIO: responses are received with a huge delay on JVM Windows (due to reverse DNS lookup internally) (KTOR-4827)
  • Netty HTTP/2 not working (KTOR-578)
  • HTTP/2 push fails with Netty engine (KTOR-800)
  • HttpCookies: no space between cookie pairs (KTOR-3854)
  • Netty ALPN provider detection not working (KTOR-4712)
  • CIO: Connection reset by peer on MacOS (KTOR-2036)
  • CallLogging MDC with sessions: Application feature Sessions is not installed (KTOR-550)
  • Deprecate Public API with Atomicfu Declarations (KTOR-4774)
  • Deprecate receiveOrNull because it's confusing (KTOR-4772)
  • Server ContentNegotiation Plugin doesn't check ignoredTypes for Request Body (KTOR-4770)
  • IllegalArgumentException is thrown when UnixSocketAddress.path is accessed on JVM (JDK 16+) (KTOR-4695)
  • WebSocketDeflateExtension not following RFC (KTOR-4696)
  • The parseWebSocketExtensions function behaves incorrectly (KTOR-3189)
  • Receive non-Nullable Type Throws NPE in Case of Failure (KTOR-4771)
  • Darwin: Symbol not found: OBJC_CLASS$_NSURLSessionWebSocketMessage on iOS 12 (KTOR-4159)
  • Fix Merging Date Headers on the Client (KTOR-4782)
  • Replace exception in InputStreamAdapter and OutputStreamAdapter constructors with warning message If parking (KTOR-4736)
  • Clearing Session Cookie in Chrome 80+ with SameSite and Secure (KTOR-437)
  • The OutgoingContent.toByteArray() stalls when used in combination with a OutgoingContent.WriteChannelContent (KTOR-2126)
  • Missing Content-Type header in a request (KTOR-1407)
  • Crash when making requests from browser inside of web worker (KTOR-4715)
  • An error occurs when there is a binary such as protobuf in the response body of error (KTOR-1619)
  • CallLogging configured MDC entries are not passed to StatusPages exception handlers (KTOR-4193)
  • LocalFileContent incorrectly relies on the last modification time of a file to check its existence (KTOR-4707)
  • Sessions: WSS in combination with Secure cookies throws IllegalArgumentException (KTOR-4697)
  • Json request failure with configured form authentication (KTOR-678)

2.1.0

11 Aug 13:44
3b4de14
Compare
Choose a tag to compare

Published 11 August 2022

  • Add YAML Configuration Format Support (KTOR-3572)
  • Allow overriding HSTS settings per host (KTOR-4578)
  • CORS: Pattern matching for origin (KTOR-316)
  • Darwin: Allow setting custom NSURLSession (KTOR-583)
  • Support setting caching options on call (KTOR-457)
  • Revert default behavior of string encoding for ContentNegotiation and JsonPlugin (KTOR-4739)
  • Make Content-Length header validation optional (KTOR-4655)
  • Client resources plugin miss builders for PATCH method (KTOR-4658)
  • The awaitSuspend method wakes up early in closed ByteChannelSequential (KTOR-4597)
  • HttpCache plugin does not support max-stale directive (KTOR-4610)
  • Incoming request body validation (KTOR-503)
  • Client does not support sending or receiving json null value (KTOR-745)
  • Jetty: Content Length exception when body size is greater than 4096 bytes (KTOR-4622)
  • Darwin: configureRequest doesn't actually configure a NSMutableURLRequest when HTTP request is made (KTOR-4719)
  • OAuth2: Allow sending extra parameters for authorization and access token requests (KTOR-2128)
  • Java engine: Allow configuring HTTP version (KTOR-4609)
  • ContentEncoding: body<ByteArray>() receives truncated array (KTOR-4653)
  • Support configuring Netty codec limits via application config (KTOR-4636)
  • [OkHttp] StreamRequestBody should override isOneShot or allow multiple reads of request body (KTOR-4637)
  • OverridingClassLoader fails to delegate to parent for resources (KTOR-4004)
  • OkHttp and iOS: request with only-if-cache directive in Cache-Control header fails with 504 when match is stale (KTOR-4127)
  • Allow Pebble to use Accepted Language header for built-in i18n support (KTOR-4593)
  • Test engine can't handle concurrent requests (KTOR-4572)
  • Parameters of cloned UrlBuilder affect parameters of an original builder (KTOR-4573)
  • Reified type causes ApplicationCall.receive() throw UnsupportedOperationException (KTOR-3715)
  • ApplicationConfig lacks the ability to export a part of the config to a third-party library (KTOR-4416)
  • Path parameter doesn't get encoded in type safe requests (KTOR-3953)
  • Update Kotlin to 1.7.0 (KTOR-4450)
  • Bump jteVersion from 2.0.3 to 2.1.2 (KTOR-4648)

2.0.3

28 Jun 16:46
a493abd
Compare
Choose a tag to compare

Published 28 June 2022

  • Development mode class loader leads to ClassCastException within a CouroutineScope (KTOR-4164)
  • Validate that the body of an incoming request is received completely (KTOR-4379)
  • UrlBuilder escapes fragment parameters (KTOR-4412)
  • CallLogging: JVM crashes when jansi checks whether a file descriptor refers to a terminal (KTOR-3476)
  • WebSocket client closes connection due to an HTTP request timeout (KTOR-4419)
  • [JS client] Cannot change redirect policy by followRedirects=false (KTOR-326)
  • CIO engine doesn't apply a request timeout from the HttpTimeout plugin (KTOR-4473)
  • CIO: Websockets request doesn't include query parameters (KTOR-4390)
  • Ignore SIGPIPE for server sockets (KTOR-4474)
  • Direct byte buffers are increased in size when server slowly processes request (KTOR-4397)
  • UDP responses are received with a huge delay on JVM Windows (due to reverse DNS lookup internally) (KTOR-4423)
  • "No instance for key AttributeKey: ApplicationPluginRegistry" when exception is thrown during the Call phase (KTOR-4448)
  • Non-decipherable exception "No result transformation found" (KTOR-4287)
  • Unable to set the Content-Type header in a request (KTOR-620)
  • Update kotlinx.coroutines to 1.6.2 (KTOR-4451)
  • Support the HttpTimeout capability in the DelegatingTestClientEngine (KTOR-4436)
  • Limit the number of parallel running requests in Netty (KTOR-4575)
  • Resources plugin fails to process parameters of type UShort (KTOR-4424)
  • Resources plugin doesn't respect default values for Enum (KTOR-4411)
  • Invalid request line produced by CIO engine for URL with parameters and without path (KTOR-4347)
  • call.receiveText() tries to parse body as JSON when the ContentNegotiation plugin is installed (KTOR-4426)
  • Ignore ByteReadChannel as receive type in ContentNegotiation (KTOR-4511)
  • Setting body to TextContent leads to NPE when the ContentNegotiation plugin is installed (KTOR-4383)
  • submitFormWithBinaryData call leads to NPE when the ContentNegotiation plugin is installed (KTOR-4269)
  • ResponseConverter NPE when returning ByteArray with the ContentNegotiation plugin (KTOR-4399)

2.0.2

30 May 06:25
@e5l e5l
Compare
Choose a tag to compare

Published 27 May 2022

  • [iOS] Prevent HttpClient from persisting cookies across requests (KTOR-3748)
  • Web feedback from "Creating HTTP APIs", https://ktor.io/docs/creating-http-apis.html (KTOR-4380)
  • When returning a String, content negotiation is ignored (KTOR-662)
  • HttpResponse.bodyAsChannel should not be converted by ContentNegotiation (KTOR-4341)
  • Strings are not decoded when received as application/json (KTOR-385)
  • Document how to enable/disable HTTP/2 for different client engines (KTOR-4340)
  • Revert Dokka to 1.6.10 due to Publication Freeze (KTOR-4290)
  • Document a new memory model in KMM tutorial (KTOR-4354)
  • Make client docs less JVM-centric (KTOR-4351)
  • Darwin engine: Client connection is closed after each request (KTOR-4145)
  • Ios: NullPointerException when query parameters contain cyrillic symbols in values (KTOR-1858)
  • A native application with the Darwin engine doesn't make a request (KTOR-3900)
  • Darwin and Kotlin/JS: "List has more than one element" error when header like Content-type is duplicated in a response (KTOR-4105)
  • Invalid response without error (KTOR-369)
  • Invalid HTTP version should fail (KTOR-380)
  • The colon after the host parameter requires a port (KTOR-382)
  • Kotlin/Native: testApplication's client sometimes fails to receive ByteArray response from a route (KTOR-4197)
  • "Application started" is never printed (KTOR-4319)
  • Default request without explicit port sets port 80 for all requests (KTOR-4281)
  • Documentation about how to configure libcurl on Windows (KTOR-3988)
  • API Docs reference RFCs. Better to reference our own documentation (KTOR-3764)
  • UninitializedPropertyAccessException in the handleResponseExceptionWithRequest when request or response are accessed through (KTOR-4230)HttpClientCall
  • The original exception is swallowed by "No request transformation found" exception when request body is serializable object (KTOR-4160)
  • IncorrectDereferenceException when trying to create HttpClient from background thread on iOS (KTOR-4263)
  • JacksonWebsocketContentConverter.deserialize just doesn't work (KTOR-4248)
  • Documentation for migration of Authentication server plugin (KTOR-4253)
  • Add sample for the AuthenticationChecked hook (KTOR-4278)
  • Web feedback from "Docker", https://ktor.io/docs/docker.html (KTOR-4282)
  • Route's path parameters are empty when ApplicationCall.authentication is first accessed in a different ApplicationCall context (KTOR-4250)
  • Routes with tailcard should not count for specific http error codes (KTOR-4280)
  • Documentation for appending query parameters for URL in the DefaultRequest (KTOR-4252)
  • Routing returns 405 even for not completely matched paths (KTOR-4267)
  • Resources: builder methods return routes with PathSegmentConstantRouteSelector instead of HttpMethodRouteSelector (KTOR-4239)
  • Update Netty to 4.1.77.Final (KTOR-4339)
  • External services should use config from environment (KTOR-4373)
  • Update Jackson to 2.13.3 (KTOR-4394)

2.0.1

28 Apr 15:52
4b32ce6
Compare
Choose a tag to compare

2.0.1

Published 28 April 2022

  • Fix URL representation (KTOR-4241)
  • embeddedServer for CIO and Netty inconsistency (KTOR-755)
  • Update Coroutines to 1.6.1 (KTOR-4240)
  • Locations: Support trailing / (KTOR-836)
  • Resources: Make Route.handle public (KTOR-4200)
  • Fix CURL flaky initialization (KTOR-4223)
  • Optimize Slow Native Tests (KTOR-4224)
  • Print Native Stacktrace on Timeout (KTOR-4198)
  • """IllegalStateException: Operation is already in progress"" when the readByte is called the second time after a timeout" (KTOR-4218)
  • Update Kotlin to 1.6.21 (KTOR-4221)
  • Update code for editing an article in the 'Interactive website' tutorial (KTOR-4227)
  • DefaultRequest: HTTPS protocol isn't set when using Ktor 2.0.0 (KTOR-4142)
  • DefaultRequest: host and port aren't used for a request (KTOR-4154)
  • A table with test methods should span the entire width of the dialog (KTOR-4064)
  • StatusPages plugin does not handle most specific exception in Ktor 2.0.0 (KTOR-4187)
  • Behaviour of ApplicationEngine start method not documented properly (KTOR-2271)
  • CORS plugin should be route scoped (KTOR-4157)
  • Raw Web Socket Connection Suspending Forever (KTOR-4166)
  • StatusPages: SerializationException isn't handled when CallID plugin is installed after StatusPages plugin (KTOR-4155)
  • HttpClient.wss defaults to port 80 instead of 443 (KTOR-4175)
  • Missing subject parameter in StatusPages status config method (KTOR-4191)
  • ConditionalHeaders cause the Last-Modified header appears twice in a response (2.0.0) (KTOR-4163)
  • DefaultHeaders: The Server header appears twice in a response (2.0.0) (KTOR-4152)
  • Testing: Resolving a substitution to a value in default config fails when custom HOCON config is used (KTOR-4130)
  • Combination of HttpCache and Logging plugins cause receiving incomplete response body for chunked replies (KTOR-3916)