CHANGELOG.md 210,7 КБ
Newer Older
Aleksei Tirman's avatar
Aleksei Tirman включено в состав коммита
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 3.1.1
> Published 24 February 2025

### Improvements
* Logging: messages are printed per line with OkHttp logger format ([KTOR-8218](https://youtrack.jetbrains.com/issue/KTOR-8218))
* WebSocket and SSE don't respect connection timeout set in the HttpTimeout plugin ([KTOR-8206](https://youtrack.jetbrains.com/issue/KTOR-8206))

### Bugfixes
* formData: implementation of copying Source is broken ([KTOR-8210](https://youtrack.jetbrains.com/issue/KTOR-8210))
* Race condition when writing to a buffer leads to NPE inside CIOReaderKt.readFrom ([KTOR-8105](https://youtrack.jetbrains.com/issue/KTOR-8105))
* TLS client: IOException while writing to a closed TLS socket since 3.0.0 ([KTOR-7860](https://youtrack.jetbrains.com/issue/KTOR-7860))
* Exception thrown in onCallRespond makes the client wait for response indefinitely ([KTOR-7139](https://youtrack.jetbrains.com/issue/KTOR-7139))
* HttpCache: Cache isn't updated when Vary header for 304 response matches but not equal to Vary for 200 response ([KTOR-7104](https://youtrack.jetbrains.com/issue/KTOR-7104))
* OOM on SourceByteReadChannel for large input ([KTOR-8190](https://youtrack.jetbrains.com/issue/KTOR-8190))
* ArrayIndexOutOfBounds kotlinx-io ([KTOR-8096](https://youtrack.jetbrains.com/issue/KTOR-8096))
* NPE in readBuffer ([KTOR-8086](https://youtrack.jetbrains.com/issue/KTOR-8086))
* JS/WASM fails with "IllegalStateException: Content-Length mismatch" on requesting gzipped content ([KTOR-7934](https://youtrack.jetbrains.com/issue/KTOR-7934))
* Resources: a / route isn't resolved when there is a sibling `staticResources` ([KTOR-6671](https://youtrack.jetbrains.com/issue/KTOR-6671))
* Server accepts \r without a following \n as a valid line terminator in chunked transfer encoding ([KTOR-8015](https://youtrack.jetbrains.com/issue/KTOR-8015))


Aleksei Tirman's avatar
Aleksei Tirman включено в состав коммита
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
# 3.1.0
> Published 11 February 2025

### Features
* Add reconnection in ClientSSESession ([KTOR-6242](https://youtrack.jetbrains.com/issue/KTOR-6242))
* Add heartbeat to SSE ([KTOR-7908](https://youtrack.jetbrains.com/issue/KTOR-7908))
* Add serialization for SSE ([KTOR-7435](https://youtrack.jetbrains.com/issue/KTOR-7435))
* Support WebSockets in Curl engine ([KTOR-5199](https://youtrack.jetbrains.com/issue/KTOR-5199))
* Support conversion between byte channel interfaces and kotlinx-io primitives ([KTOR-7327](https://youtrack.jetbrains.com/issue/KTOR-7327))
* Support CIO server on WasmJS and JS targets ([KTOR-865](https://youtrack.jetbrains.com/issue/KTOR-865))
* Logging: Format log like OkHttp client does ([KTOR-7806](https://youtrack.jetbrains.com/issue/KTOR-7806))
* Support static linking for curl on all platforms ([KTOR-6754](https://youtrack.jetbrains.com/issue/KTOR-6754))
* Support ARM target in Ktor client with Kotlin/Native and Curl ([KTOR-4570](https://youtrack.jetbrains.com/issue/KTOR-4570))
* Unix Domain Socket Support for Native Targets ([KTOR-6960](https://youtrack.jetbrains.com/issue/KTOR-6960))
* Support receiving multipart data with Ktor client ([KTOR-6632](https://youtrack.jetbrains.com/issue/KTOR-6632))
* Client CIO engine support for wasm-js and js ([KTOR-7675](https://youtrack.jetbrains.com/issue/KTOR-7675))
* Support NodeJs target for ktor-network ([KTOR-6004](https://youtrack.jetbrains.com/issue/KTOR-6004))

### Improvements
* Auth: BasicAuthProvider caches credentials until process death ([KTOR-7775](https://youtrack.jetbrains.com/issue/KTOR-7775))
* CallLogging: Unhelpful log output "Application started: ..." ([KTOR-7797](https://youtrack.jetbrains.com/issue/KTOR-7797))
* Add operator contains to ContentType objects ([KTOR-8145](https://youtrack.jetbrains.com/issue/KTOR-8145))
* Darwin: Ambiguous DarwinHttpRequestException for SSL Pinning failure ([KTOR-6759](https://youtrack.jetbrains.com/issue/KTOR-6759))
* Introduce ServerSocket.port to simplify port access for the bound server ([KTOR-8136](https://youtrack.jetbrains.com/issue/KTOR-8136))
* Java, Js, Darwin: Response header Sec-WebSocket-Protocol is missing ([KTOR-6970](https://youtrack.jetbrains.com/issue/KTOR-6970))
* Fail to parse url: file:/path/to/file.txt ([KTOR-6709](https://youtrack.jetbrains.com/issue/KTOR-6709))
* Auth: Make re-auth/refresh status codes configurable ([KTOR-7644](https://youtrack.jetbrains.com/issue/KTOR-7644))
* Add media type for Yaml ([KTOR-8064](https://youtrack.jetbrains.com/issue/KTOR-8064))
* Logging: HTTP method is logged with the class name ([KTOR-8011](https://youtrack.jetbrains.com/issue/KTOR-8011))
* Uncaught cannot write to a channel errors from ws-pinger ([KTOR-8008](https://youtrack.jetbrains.com/issue/KTOR-8008))
* Apache5 client: Upgrade HttpClient to 5.4 ([KTOR-8080](https://youtrack.jetbrains.com/issue/KTOR-8080))
* Swagger: Add deepLinking configuration ([KTOR-8074](https://youtrack.jetbrains.com/issue/KTOR-8074))
* Access to the configuration options of a HttpClient plugin to tweak or wrap them with additional logic ([KTOR-7213](https://youtrack.jetbrains.com/issue/KTOR-7213))
* Don't publish internal test artifacts ([KTOR-8058](https://youtrack.jetbrains.com/issue/KTOR-8058))
* Micrometer: Add UptimeMetrics to standard meterBinders ([KTOR-8061](https://youtrack.jetbrains.com/issue/KTOR-8061))
* MicrometerMetrics: Do not write unknown HTTP method names to metrics ([KTOR-7658](https://youtrack.jetbrains.com/issue/KTOR-7658))
* Update to Kotlin 2.1.0 ([KTOR-7866](https://youtrack.jetbrains.com/issue/KTOR-7866))
* ByteWriteChannel is missing writeFloat()/readFloat() ([KTOR-7651](https://youtrack.jetbrains.com/issue/KTOR-7651))
* Engine exclusion from clientTests is confusing ([KTOR-7723](https://youtrack.jetbrains.com/issue/KTOR-7723))
* UrlBuilder: Support telephone scheme ([KTOR-4816](https://youtrack.jetbrains.com/issue/KTOR-4816))
* Swagger UI: Missing Favicon while browsing the UI ([KTOR-7893](https://youtrack.jetbrains.com/issue/KTOR-7893))
* ContentNegotiation client plugin: no way to opt out of Accept on a per-request basis ([KTOR-7722](https://youtrack.jetbrains.com/issue/KTOR-7722))
* `receiveMultipart` throws IllegalStateException instead of UnsupportedMediaTypeException ([KTOR-7470](https://youtrack.jetbrains.com/issue/KTOR-7470))
* Implement a suspending version of EmbeddedServer.start(wait=true) ([KTOR-7459](https://youtrack.jetbrains.com/issue/KTOR-7459))
* Allow to Disable Body Decompression on the Server for a specific call ([KTOR-7679](https://youtrack.jetbrains.com/issue/KTOR-7679))
* UDPSocketBuilder missing `bind` overload with `hostName` and `port` ([KTOR-7663](https://youtrack.jetbrains.com/issue/KTOR-7663))
* Make Url class @Serializable and JVM Serializable ([KTOR-7620](https://youtrack.jetbrains.com/issue/KTOR-7620))
* Improve parsing of supported media types (MIME types) ([KTOR-7586](https://youtrack.jetbrains.com/issue/KTOR-7586))
* Migrate to kotlin.AutoCloseable ([KTOR-7606](https://youtrack.jetbrains.com/issue/KTOR-7606))

### Bugfixes
* ByteChannel read issue on min > 1 ([KTOR-8172](https://youtrack.jetbrains.com/issue/KTOR-8172))
* CIO Server Engine fails for requests with more than 64 headers ([KTOR-8164](https://youtrack.jetbrains.com/issue/KTOR-8164))
* OutOfMemoryError when sending a large binary file through ByteReadChannel converted from InputStream ([KTOR-6185](https://youtrack.jetbrains.com/issue/KTOR-6185))
* Native Windows tests failing due to port exhaustion ([KTOR-7392](https://youtrack.jetbrains.com/issue/KTOR-7392))
* Unable to close socket with open read/write channels on Native ([KTOR-8144](https://youtrack.jetbrains.com/issue/KTOR-8144))
* Jetty idleTimeout not working ([KTOR-8138](https://youtrack.jetbrains.com/issue/KTOR-8138))
* Fix concurrent flush and close in the reader ([KTOR-8133](https://youtrack.jetbrains.com/issue/KTOR-8133))
* Socket.accept doesn't throw an exception on closing a socket on Native ([KTOR-8135](https://youtrack.jetbrains.com/issue/KTOR-8135))
* "AbortError: BodyStreamBuffer was aborted" error when canceling parent job ([KTOR-7734](https://youtrack.jetbrains.com/issue/KTOR-7734))
* Race condition when writing to a buffer leads to NPE inside CIOReaderKt.readFrom ([KTOR-8105](https://youtrack.jetbrains.com/issue/KTOR-8105))
* ArrayIndexOutOfBounds kotlinx-io ([KTOR-8096](https://youtrack.jetbrains.com/issue/KTOR-8096))
* NPE in readBuffer ([KTOR-8086](https://youtrack.jetbrains.com/issue/KTOR-8086))
* JS/WASM fails with "IllegalStateException: Content-Length mismatch" on requesting gzipped content ([KTOR-7934](https://youtrack.jetbrains.com/issue/KTOR-7934))
* SessionStorage.read() is called for non-authenticated routes and static assets ([KTOR-7194](https://youtrack.jetbrains.com/issue/KTOR-7194))
* Read mutipart upload regression from 2.x to 3.x ([KTOR-8082](https://youtrack.jetbrains.com/issue/KTOR-8082))
* HttpRequestRetry: race condition for isClosedForRead leads to EOFException: Channel is already closed ([KTOR-8051](https://youtrack.jetbrains.com/issue/KTOR-8051))
* ktor-client-curl artifacts aren’t published after EAP 1146 ([KTOR-8091](https://youtrack.jetbrains.com/issue/KTOR-8091))
* DoubleReceive: NullPointerException caused by race condition ([KTOR-8045](https://youtrack.jetbrains.com/issue/KTOR-8045))
* Uncaught ClosedWatchServiceException exception thrown by finalizer when closing the server ([KTOR-7963](https://youtrack.jetbrains.com/issue/KTOR-7963))
* Curl: Error linking curl in linkDebugExecutableLinuxX64 on macOS ([KTOR-6361](https://youtrack.jetbrains.com/issue/KTOR-6361))
* ktor-server-core: Test files are part of the distribution code ([KTOR-8003](https://youtrack.jetbrains.com/issue/KTOR-8003))
* Windows: undefined symbols in linker when ktor-client-curl is used ([KTOR-4307](https://youtrack.jetbrains.com/issue/KTOR-4307))
* SaveBodyPlugin: UninitializedPropertyAccessException when reading response body within receivePipeline ([KTOR-7952](https://youtrack.jetbrains.com/issue/KTOR-7952))


Aleksei Tirman's avatar
Aleksei Tirman включено в состав коммита
98
99
100
101
102
103
104
105
106
107
108
109
110
# 3.0.3
> Published 18 December 2024

### Bugfixes
* "Module not found" errors when executing browserProductionWebpack task since 3.0.2 ([KTOR-7912](https://youtrack.jetbrains.com/issue/KTOR-7912))
* Darwin: "IllegalStateException: Content-Length mismatch" on requesting gzipped content ([KTOR-7943](https://youtrack.jetbrains.com/issue/KTOR-7943))
* JS/WASM fails with "IllegalStateException: Content-Length mismatch" on requesting gzipped content ([KTOR-7934](https://youtrack.jetbrains.com/issue/KTOR-7934))
* FormFieldLimit is overwritten by default arg ([KTOR-7946](https://youtrack.jetbrains.com/issue/KTOR-7946))
* A Performance issue reading with ByteReadChannel.readUTF8LineTo request body ([KTOR-7941](https://youtrack.jetbrains.com/issue/KTOR-7941))
* Installing HttpCache before ContentEncoding prevents response body to be decoded ([KTOR-7830](https://youtrack.jetbrains.com/issue/KTOR-7830))
* TestApplication.stop() doesn't stop the application anymore ([KTOR-7682](https://youtrack.jetbrains.com/issue/KTOR-7682))
* File is not commited after closing writeChannel() of the file ([KTOR-7845](https://youtrack.jetbrains.com/issue/KTOR-7845))

Aleksei Tirman's avatar
Aleksei Tirman включено в состав коммита
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
# 3.0.2
> Published 3 December 2024

### Bugfixes
* ServletResponseBody is corrupted due to the wrong offset ([KTOR-7904](https://youtrack.jetbrains.com/issue/KTOR-7904))
* File is not commited after closing writeChannel() of the file ([KTOR-7845](https://youtrack.jetbrains.com/issue/KTOR-7845))
* CIO: Response body truncated because read amount of bytes isn't compared against Content-Length ([KTOR-7828](https://youtrack.jetbrains.com/issue/KTOR-7828))
* HttpCache: IndexOutOfBoundsException on malformed Cache-Control header ([KTOR-7172](https://youtrack.jetbrains.com/issue/KTOR-7172))
* call.respondSource returns empty response but passes in tests ([KTOR-7683](https://youtrack.jetbrains.com/issue/KTOR-7683))
* ByteReadChannel.{readShort/readInt/readLong} leads to infinite loop when required bytes distributed in flush and read buffers ([KTOR-7746](https://youtrack.jetbrains.com/issue/KTOR-7746))
* Routing: ContentType.match doesn't match wildcard content types ([KTOR-7278](https://youtrack.jetbrains.com/issue/KTOR-7278))
* Connections aren't released properly if there are multiple parallel connections to the same address ([KTOR-7777](https://youtrack.jetbrains.com/issue/KTOR-7777))
* `FileItem.streamProvider` is deprecated and doesn't have implementation ([KTOR-7731](https://youtrack.jetbrains.com/issue/KTOR-7731))
* MergedApplicationConfig.toMap replaces nested configs completely without merging ([KTOR-7008](https://youtrack.jetbrains.com/issue/KTOR-7008))
* Digest Auth: Ktor 3.0.1 uses the wrong "nc" value to calculate digest ([KTOR-7681](https://youtrack.jetbrains.com/issue/KTOR-7681))
* JS: "ReferenceError: require is not defined" when compiling to ES Module ([KTOR-6158](https://youtrack.jetbrains.com/issue/KTOR-6158))
* Chunked transfer encoding failure not caught with retry ([KTOR-7618](https://youtrack.jetbrains.com/issue/KTOR-7618))
* HttpCookies: IllegalArgumentException when server returns a raw cookie with not allowed characters ([KTOR-7469](https://youtrack.jetbrains.com/issue/KTOR-7469))
* DefaultRequest: Content-Type header of default request is not overridable ([KTOR-6946](https://youtrack.jetbrains.com/issue/KTOR-6946))

### Improvements
* Support binary (Smile) encoding in JacksonConverter ([KTOR-7726](https://youtrack.jetbrains.com/issue/KTOR-7726))
* ServiceLoader.load call is slow on Android ([KTOR-7698](https://youtrack.jetbrains.com/issue/KTOR-7698))


Aleksei Tirman's avatar
Aleksei Tirman включено в состав коммита
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
# 3.0.1
> Published 29 October 2024

### Bugfixes
* Remove space from the default client user agent ([KTOR-7655](https://youtrack.jetbrains.com/issue/KTOR-7655))
* `Url.segments` throws on URLs with root path ([KTOR-7625](https://youtrack.jetbrains.com/issue/KTOR-7625))
* Digest Auth does not implement nc parameter correctly according to RFC 7616 ([KTOR-4318](https://youtrack.jetbrains.com/issue/KTOR-4318))
* about:blank URL should be parsed correctly as about:blank ([KTOR-7410](https://youtrack.jetbrains.com/issue/KTOR-7410))
* ByteReadChannel.{readShort/readInt/readLong} could lead to CPU-bound indefinite loop since 3.0.0 ([KTOR-7571](https://youtrack.jetbrains.com/issue/KTOR-7571))
* CIO: Requests face connection timeouts when executed on the Android main dispatcher ([KTOR-6803](https://youtrack.jetbrains.com/issue/KTOR-6803))
* receiveMultipart fails with "IOException: Failed to parse multipart" when content-type is capitalized ([KTOR-7596](https://youtrack.jetbrains.com/issue/KTOR-7596))

### Improvements
* WebSockets logging: The plugin calls toString() unnecessarily on transformed response body ([KTOR-7623](https://youtrack.jetbrains.com/issue/KTOR-7623))
* INFO log message with all server interceptors on server startup ([KTOR-7326](https://youtrack.jetbrains.com/issue/KTOR-7326))
* Digest auth: `username` and `cnonce` parameters aren't surrounded with quotes ([KTOR-7561](https://youtrack.jetbrains.com/issue/KTOR-7561))
* ContentType.fromFilePath for newer file formats HEIC, AVIF, HEIF ([KTOR-7536](https://youtrack.jetbrains.com/issue/KTOR-7536))
* Support missing native targets in ktor-serialization-kotlinx-xml ([KTOR-7583](https://youtrack.jetbrains.com/issue/KTOR-7583))


Aleksei Tirman's avatar
Aleksei Tirman включено в состав коммита
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
# 3.0.0
> Published 9 October 2024

### Bugfixes
* Darwin: The `maxFrameSize` option has no effect ([KTOR-6963](https://youtrack.jetbrains.com/issue/KTOR-6963))
* KotlinReflectionInternalError (createClientPlugin) when running release APK on Android ([KTOR-7479](https://youtrack.jetbrains.com/issue/KTOR-7479))
* Netty: UnsupportedOperationException is thrown when responding in CallSetup and CORS plugin is installed ([KTOR-4433](https://youtrack.jetbrains.com/issue/KTOR-4433))
* MicrometerMetrics: Prometheus meter registry 1.13.0 generates configuration warning ([KTOR-7035](https://youtrack.jetbrains.com/issue/KTOR-7035))
* Websockets/Auth: ProtocolException when requesting protected WebSockets endpoint ([KTOR-7363](https://youtrack.jetbrains.com/issue/KTOR-7363))
* Data truncated in receiveParameters and receiveMultipart ([KTOR-7201](https://youtrack.jetbrains.com/issue/KTOR-7201))
* The `pathSegments` returns empty strings for trailing slashes ([KTOR-4402](https://youtrack.jetbrains.com/issue/KTOR-4402))
* HttpRequestRetry: exponential delay doesn't work for delays <= 1 second ([KTOR-7294](https://youtrack.jetbrains.com/issue/KTOR-7294))
* JS browser: "Error: HttpClientCall expected" on HTTP request when targeting es2015 ([KTOR-6882](https://youtrack.jetbrains.com/issue/KTOR-6882))
* Incomplete write using io.ktor.util.cio.FileChannelsKt#writeChannel ([KTOR-1618](https://youtrack.jetbrains.com/issue/KTOR-1618))
* `response.content.copyAndClose(targetFile.writeChannel())` sometimes loses some bytes ([KTOR-3003](https://youtrack.jetbrains.com/issue/KTOR-3003))
* ByteWriteChannel.flush is not Waiting Until Flushing the Internal Buffer to the Destination ([KTOR-3102](https://youtrack.jetbrains.com/issue/KTOR-3102))
* CORS check fails when the Origin header has a value without trailing slash ([KTOR-5936](https://youtrack.jetbrains.com/issue/KTOR-5936))
* Closing socket and selector leaks descriptor on native ([KTOR-7255](https://youtrack.jetbrains.com/issue/KTOR-7255))
* ConnectionUtilsNative leaks descriptors on error ([KTOR-6977](https://youtrack.jetbrains.com/issue/KTOR-6977))
* withTimeout doesn't cancel socket connection on native ([KTOR-5289](https://youtrack.jetbrains.com/issue/KTOR-5289))
* MockEngine: the ability to set dispatcher is removed ([KTOR-6417](https://youtrack.jetbrains.com/issue/KTOR-6417))

### Improvements
* Misleading `readBytes` method name ([KTOR-6596](https://youtrack.jetbrains.com/issue/KTOR-6596))
* Remove reflection utils used only on JVM target from common source set ([KTOR-7540](https://youtrack.jetbrains.com/issue/KTOR-7540))
* Weak security algorithm (MD5) in FileCacheStorage ([KTOR-6589](https://youtrack.jetbrains.com/issue/KTOR-6589))
* Missing constants for AcceptEncoding ([KTOR-6412](https://youtrack.jetbrains.com/issue/KTOR-6412))
* Add `respondFile` overload with `Path` parameters ([KTOR-7202](https://youtrack.jetbrains.com/issue/KTOR-7202))
* MalformedInputException confusingly is a Throwable but not an Exception ([KTOR-7316](https://youtrack.jetbrains.com/issue/KTOR-7316))
* CSRF: The allowOrigin method enables the Origin Header validation ([KTOR-6695](https://youtrack.jetbrains.com/issue/KTOR-6695))
* Auth: Drop marker interface requirements ([KTOR-7323](https://youtrack.jetbrains.com/issue/KTOR-7323))
* Routing: Support accessing the request body in RouteSelector ([KTOR-7084](https://youtrack.jetbrains.com/issue/KTOR-7084))
* Make Cookie class Serializable ([KTOR-6258](https://youtrack.jetbrains.com/issue/KTOR-6258))
* Make the internal Route.swaggerUI method public ([KTOR-6491](https://youtrack.jetbrains.com/issue/KTOR-6491))
* Ktor clients and servers should use Dispatchers.IO.limitedParallelism(...) wherever possible ([KTOR-6462](https://youtrack.jetbrains.com/issue/KTOR-6462))

### Features
* Support androidNative targets ([KTOR-7289](https://youtrack.jetbrains.com/issue/KTOR-7289))
* Provide the API that simplifies disabling CORS for testing purposes ([KTOR-3329](https://youtrack.jetbrains.com/issue/KTOR-3329))
* Add support for mingw to ktor-network in order to make server and client work on windows ([KTOR-4080](https://youtrack.jetbrains.com/issue/KTOR-4080))


Aleksei Tirman's avatar
Aleksei Tirman включено в состав коммита
198
# 3.0.0-rc-2
Aleksei Tirman's avatar
Aleksei Tirman включено в состав коммита
199
> Published 2 October 2024
Aleksei Tirman's avatar
Aleksei Tirman включено в состав коммита
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217

### Bugfixes
* Sessions: custom SessionSerializer is no longer supported ([KTOR-7442](https://youtrack.jetbrains.com/issue/KTOR-7442))
* Multipart/form-data: Request timeout when receiving FileItem with 3.0.0-rc-1 ([KTOR-7484](https://youtrack.jetbrains.com/issue/KTOR-7484))
* MultiPartData.readPart does not return null when stream ends ([KTOR-7500](https://youtrack.jetbrains.com/issue/KTOR-7500))
* Multipart/form-data: Form limit applied for binary and file items ([KTOR-7356](https://youtrack.jetbrains.com/issue/KTOR-7356))
* Autoreload not working by default under Windows ([KTOR-3031](https://youtrack.jetbrains.com/issue/KTOR-3031))
* HttpCache: Cache collision in the plugin when Authorization header is used ([KTOR-7483](https://youtrack.jetbrains.com/issue/KTOR-7483))
* Gradle sync issue with kotlin-serialization 1.7.2 on 3.0.0-rc-1 ([KTOR-7477](https://youtrack.jetbrains.com/issue/KTOR-7477))
* The ApplicationStopping event isn't raised when application is terminated with SIGINT ([KTOR-7448](https://youtrack.jetbrains.com/issue/KTOR-7448))
* respondOutputStream reads entire contents into memory before returning response ([KTOR-7461](https://youtrack.jetbrains.com/issue/KTOR-7461))
* UninitializedPropertyAccessException for `request` property when using MonitoringEvent(RoutingCallStarted) ([KTOR-7449](https://youtrack.jetbrains.com/issue/KTOR-7449))
* Preconfigured NSURLSession causes requests to hang ([KTOR-7355](https://youtrack.jetbrains.com/issue/KTOR-7355))
* Failures after upgrading Ktor in test server ([KTOR-7431](https://youtrack.jetbrains.com/issue/KTOR-7431))
* `InputStream.toByteReadChannel` creates unattached job ([KTOR-7012](https://youtrack.jetbrains.com/issue/KTOR-7012))
* Maven builds not working ([KTOR-7425](https://youtrack.jetbrains.com/issue/KTOR-7425))

### Improvements
Aleksei Tirman's avatar
Aleksei Tirman включено в состав коммита
218
219
* [![Breaking change](https://img.shields.io/badge/[Breaking%20change]-red?style=flat-square)](#) Deprecate `withTestApplication` APIs with ERROR and migrate to `testApplication` ([KTOR-7284](https://youtrack.jetbrains.com/issue/KTOR-7284))
* [![Breaking change](https://img.shields.io/badge/[Breaking%20change]-red?style=flat-square)](#) Replace `java.time` options in Websockets plugin ([KTOR-7446](https://youtrack.jetbrains.com/issue/KTOR-7446))
Aleksei Tirman's avatar
Aleksei Tirman включено в состав коммита
220
221
222
223
224
225
226
227
228
229
230
231
* Ktor doesn't read System properties from jvm ([KTOR-7492](https://youtrack.jetbrains.com/issue/KTOR-7492))
* Redirect dependencies from ktor-server-test-base ([KTOR-7393](https://youtrack.jetbrains.com/issue/KTOR-7393))
* Include relocation notes for old Ktor modules ([KTOR-6826](https://youtrack.jetbrains.com/issue/KTOR-6826))
* `ByteReadChannel.readFully(dst: ByteArray, offset: Int, length: Int)` is missing since 3.0.0-beta-2 ([KTOR-7427](https://youtrack.jetbrains.com/issue/KTOR-7427))
* ByteChannel.readUtf8Line() backwards compatibility ([KTOR-7474](https://youtrack.jetbrains.com/issue/KTOR-7474))
* Kotlinx-io response extension ([KTOR-7504](https://youtrack.jetbrains.com/issue/KTOR-7504))

### Features
* Add multiplatform support for XML ([KTOR-5085](https://youtrack.jetbrains.com/issue/KTOR-5085))
* Add watchosDeviceArm64 target ([KTOR-6368](https://youtrack.jetbrains.com/issue/KTOR-6368))


Aleksei Tirman's avatar
Aleksei Tirman включено в состав коммита
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
# 3.0.0-rc-1
> Published 9 September 2024

### Bugfixes
* Bytecode incompatibility in AttributeKey ([KTOR-7334](https://youtrack.jetbrains.com/issue/KTOR-7334))
* ContentEncoding: request hangs when using 3.0.0-beta-2 ([KTOR-7265](https://youtrack.jetbrains.com/issue/KTOR-7265))
* Revert Routing API changes from `Route` to `Routing` ([KTOR-7238](https://youtrack.jetbrains.com/issue/KTOR-7238))
* IOException: startIndex (0) > endIndex (-1) when making concurrent requests via thread pool ([KTOR-7254](https://youtrack.jetbrains.com/issue/KTOR-7254))
* ByteReadChannel.copyTo sometimes throws "IllegalArgumentException: Buffer is empty" ([KTOR-7220](https://youtrack.jetbrains.com/issue/KTOR-7220))
* Redirect dependencies from ktor-server-test-base ([KTOR-7393](https://youtrack.jetbrains.com/issue/KTOR-7393))
* CIO: EmbeddedServer.stop always blocks for shutdownGracePeriod ([KTOR-7360](https://youtrack.jetbrains.com/issue/KTOR-7360))
* SSE: the plugin doesn't follow the spec when multiline data is sent ([KTOR-7391](https://youtrack.jetbrains.com/issue/KTOR-7391))
* Infinite creation of CancellableContinuationImpl on ByteChannel.flush ([KTOR-7324](https://youtrack.jetbrains.com/issue/KTOR-7324))

### Improvements
* Include relocation notes for old Ktor modules ([KTOR-6826](https://youtrack.jetbrains.com/issue/KTOR-6826))
* Deprecate old jetty / tomcat / servlet engines ([KTOR-7315](https://youtrack.jetbrains.com/issue/KTOR-7315))
* Backwards compatibility for monitor ([KTOR-7264](https://youtrack.jetbrains.com/issue/KTOR-7264))
* ApplicationProperties naming is confusing ([KTOR-7270](https://youtrack.jetbrains.com/issue/KTOR-7270))

### Features
* staticZip: Support watching for changes and reloading of zip files ([KTOR-7243](https://youtrack.jetbrains.com/issue/KTOR-7243))

Aleksei Tirman's avatar
Aleksei Tirman включено в состав коммита
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
# 3.0.0-beta-2
> Published 15 July 2024

### Bugfixes
* io.ktor.util.TextKt.chomp doesn't work on strings with more than one character ([KTOR-7209](https://youtrack.jetbrains.com/issue/KTOR-7209))
* DefaultRequest plugin overwrites http protocol ([KTOR-5586](https://youtrack.jetbrains.com/issue/KTOR-5586))
* Ktor build problem; cannot compile native targets ([KTOR-6666](https://youtrack.jetbrains.com/issue/KTOR-6666))
* SSEException is thrown instead of JobCancellationException when coroutine's job is cancelled ([KTOR-6571](https://youtrack.jetbrains.com/issue/KTOR-6571))
* SSE request drops request body ([KTOR-6659](https://youtrack.jetbrains.com/issue/KTOR-6659))
* SSE: UnsupportedContentTypeException when sending POST request using OKHttp engine ([KTOR-6911](https://youtrack.jetbrains.com/issue/KTOR-6911))
* SSE: NoTransformationFoundException when Logging plugin with LogLevel.ALL is used ([KTOR-6912](https://youtrack.jetbrains.com/issue/KTOR-6912))
* Installing SSE breaks GET/POST functionality ([KTOR-6614](https://youtrack.jetbrains.com/issue/KTOR-6614))
* Cookies with a long Max-Age incorrectly expire in AcceptAllCookiesStorage ([KTOR-6646](https://youtrack.jetbrains.com/issue/KTOR-6646))
* Some dependency versions not tracked ([KTOR-7123](https://youtrack.jetbrains.com/issue/KTOR-7123))
* CSRF: false positive originMatchesHost validation when default port is explicitly defined ([KTOR-6701](https://youtrack.jetbrains.com/issue/KTOR-6701))
* Double Transfer-Encoding header while using respondOutputStream on Tomcat ([KTOR-6574](https://youtrack.jetbrains.com/issue/KTOR-6574))

### Improvements
* HttpCalValidatorConfig class name is misspelled ([KTOR-6625](https://youtrack.jetbrains.com/issue/KTOR-6625))
* CallLogging: package is misspelled ([KTOR-4273](https://youtrack.jetbrains.com/issue/KTOR-4273))
* Ambiguous coroutineContext warning in routing handler ([KTOR-5181](https://youtrack.jetbrains.com/issue/KTOR-5181))
* Tracing: allow changing log level at runtime for routing ([KTOR-7193](https://youtrack.jetbrains.com/issue/KTOR-7193))
* io.ktor.network.tls.TLSException has internal visibility ([KTOR-6767](https://youtrack.jetbrains.com/issue/KTOR-6767))
* Auth: Make `refreshToken` of `BearerTokens` class nullable ([KTOR-6928](https://youtrack.jetbrains.com/issue/KTOR-6928))
* Ktor test application library references internal module ([KTOR-6668](https://youtrack.jetbrains.com/issue/KTOR-6668))
* CSRF: Confusing error message when Origin validation is enabled and only Referrer header is sent ([KTOR-6702](https://youtrack.jetbrains.com/issue/KTOR-6702))
* CSRF: validations probably shouldn't be applied to GET/HEAD/OPTIONS requests ([KTOR-6698](https://youtrack.jetbrains.com/issue/KTOR-6698))
* CSRF: Empty onFailure option is misleading ([KTOR-6687](https://youtrack.jetbrains.com/issue/KTOR-6687))
* Misleading assertion message in the testEmbeddedServerCancellation test ([KTOR-6657](https://youtrack.jetbrains.com/issue/KTOR-6657))
* Allow setting "Secure" flag for cookies on localhost ([KTOR-6593](https://youtrack.jetbrains.com/issue/KTOR-6593))
* SSE: Unable to access response headers ([KTOR-6660](https://youtrack.jetbrains.com/issue/KTOR-6660))
* SSE: Improve support for testing ([KTOR-3290](https://youtrack.jetbrains.com/issue/KTOR-3290))
* OAuth handler does not propagate redirection errors to the caller ([KTOR-6605](https://youtrack.jetbrains.com/issue/KTOR-6605))
* HttpTimeoutTest.testConnect are flaky ([KTOR-1583](https://youtrack.jetbrains.com/issue/KTOR-1583))

### Features
* Migrate to new kotlinx.io library ([KTOR-6030](https://youtrack.jetbrains.com/issue/KTOR-6030))
* Change default session serializer to the one that uses kotlinx-serializaion ([KTOR-6175](https://youtrack.jetbrains.com/issue/KTOR-6175))
* Replace custom withTimeout implementation using WeakTimeoutQueue with coroutines.withTimeout ([KTOR-3658](https://youtrack.jetbrains.com/issue/KTOR-3658))
* Add Url capability: parsing/validating url strings ([KTOR-360](https://youtrack.jetbrains.com/issue/KTOR-360))
* SSE: Support handling HTTP failures ([KTOR-6808](https://youtrack.jetbrains.com/issue/KTOR-6808))
* Ktor client for Kotlin/Wasm ([KTOR-5587](https://youtrack.jetbrains.com/issue/KTOR-5587))
* CSRF protection feature ([KTOR-2910](https://youtrack.jetbrains.com/issue/KTOR-2910))

Aleksei Tirman's avatar
Aleksei Tirman включено в состав коммита
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313

# 2.3.13
> Published 20 November 2024

### Bugfixes
* CIO: Requests face connection timeouts when executed on the Android main dispatcher ([KTOR-6803](https://youtrack.jetbrains.com/issue/KTOR-6803))
* io.ktor.util.TextKt.chomp doesn't work on strings with more than one character ([KTOR-7209](https://youtrack.jetbrains.com/issue/KTOR-7209))
* "java.lang.IllegalArgumentException: Failed requirement." in SelectorManagerSupport ([KTOR-2914](https://youtrack.jetbrains.com/issue/KTOR-2914))
* Backport fix for CVE-2024-49580 to Ktor 2 ([KTOR-7727](https://youtrack.jetbrains.com/issue/KTOR-7727))

### Improvements
* Replace custom withTimeout implementation using WeakTimeoutQueue with coroutines.withTimeout ([KTOR-3658](https://youtrack.jetbrains.com/issue/KTOR-3658))
* Add watchosDeviceArm64 target ([KTOR-6368](https://youtrack.jetbrains.com/issue/KTOR-6368))


Aleksei Tirman's avatar
Aleksei Tirman включено в состав коммита
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
# 2.3.12
> Published 20 June 2024

### Bugfixes
* NoSuchMethodError when using coroutines 1.9.0-RC ([KTOR-7054](https://youtrack.jetbrains.com/issue/KTOR-7054))
* Server: Content-Type header for static js, css and svg resources misses charset ([KTOR-6655](https://youtrack.jetbrains.com/issue/KTOR-6655))
* Embedded Linux device without iso-8859-1 and UTF-16 cannot use ktor-network ([KTOR-7016](https://youtrack.jetbrains.com/issue/KTOR-7016))

### Improvements
* Update netty to 4.1.111.Final ([KTOR-7094](https://youtrack.jetbrains.com/issue/KTOR-7094))
* Update netty due to CVE-2024-29025 ([KTOR-7014](https://youtrack.jetbrains.com/issue/KTOR-7014))
* Update dependency on swagger ([KTOR-7019](https://youtrack.jetbrains.com/issue/KTOR-7019))

# 2.3.11
> Published 8 May 2024

### Bugfixes
* Test client ignores socket timeout ([KTOR-6909](https://youtrack.jetbrains.com/issue/KTOR-6909))

# 2.3.10
> Published 8 April 2024

### Bugfixes
* CallLogging, StatusPages: response logged twice when status handler is used ([KTOR-6839](https://youtrack.jetbrains.com/issue/KTOR-6839))
* NodeJS WebSocket client sometimes drops a frame received immediately after handshake ([KTOR-6883](https://youtrack.jetbrains.com/issue/KTOR-6883))
* IPv6 addresses are not supported in NettyConnectionPoint and CIOConnectionPoint ([KTOR-5383](https://youtrack.jetbrains.com/issue/KTOR-5383))
* JS browser: "Maximum call stack size exceeded" on HTTP request when targeting es2015 ([KTOR-6878](https://youtrack.jetbrains.com/issue/KTOR-6878))
* CIO: File upload fails with `NumberFormatException` when uploading file larger than INT_MAX bytes (~2.1 GiB) since 2.3.0 ([KTOR-6851](https://youtrack.jetbrains.com/issue/KTOR-6851))
* CallLogging: the plugin completely overrides MDC if at least one entry is configured ([KTOR-6642](https://youtrack.jetbrains.com/issue/KTOR-6642))
* SSE plugin: Duplicated "Content-Type: text/event-stream" headers ([KTOR-6735](https://youtrack.jetbrains.com/issue/KTOR-6735))
* CIO: "getSubjectAlternativeNames(...) must not be null" when IP-addresses are verified and no SAN in the certificate ([KTOR-6746](https://youtrack.jetbrains.com/issue/KTOR-6746))

### Improvements
* Inconsistent behavior of Netty and rest engines by returning null or empty string for query parameters without values ([KTOR-6850](https://youtrack.jetbrains.com/issue/KTOR-6850))
* Android: no logs are present in Logcat with `Logger.ANDROID` ([KTOR-1219](https://youtrack.jetbrains.com/issue/KTOR-1219))

# 2.3.9
> Published 4 March 2024

### Improvements
* Allow to set secure cookie even with http scheme ([KTOR-3159](https://youtrack.jetbrains.com/issue/KTOR-3159))

### Bugfixes
* ContentNegotiation: the plugin appends duplicated MIME type to Accept header ([KTOR-6684](https://youtrack.jetbrains.com/issue/KTOR-6684))

# 2.3.8
> Published 31 January 2024

### Bugfixes
* "KeyStoreException: JKS not found" exception on Android when configuring secure connection ([KTOR-6720](https://youtrack.jetbrains.com/issue/KTOR-6720))
* `URLBuilder` crashes on React Native platforms ([KTOR-6576](https://youtrack.jetbrains.com/issue/KTOR-6576))
* CIO: Unable to perform WebSocket upgrade when Content-Type header is sent in the request ([KTOR-6366](https://youtrack.jetbrains.com/issue/KTOR-6366))
* ContentNegotiation: Adding charset to content type of JacksonConverter breaks request matching ([KTOR-6420](https://youtrack.jetbrains.com/issue/KTOR-6420))
* High Native Server Memory Usage ([KTOR-6321](https://youtrack.jetbrains.com/issue/KTOR-6321))
* Server ContentNegotiation no longer allows multiple decoders for one Content-Type ([KTOR-5410](https://youtrack.jetbrains.com/issue/KTOR-5410))
* Logging plugin blocks response body streaming when level is BODY ([KTOR-6482](https://youtrack.jetbrains.com/issue/KTOR-6482))
* WebSockets: Confusing error message when server doesn't respond with Upgrade ([KTOR-6397](https://youtrack.jetbrains.com/issue/KTOR-6397))
* {...} (tailcard) does not match URLs ending with '/' ([KTOR-2121](https://youtrack.jetbrains.com/issue/KTOR-2121))
* HttpCache: NumberFormatException for cache-control with max age more than Int.MAX_VALUE ([KTOR-6505](https://youtrack.jetbrains.com/issue/KTOR-6505))
* CORS: `allowHost` without the second argument doesn't allow the secure host ([KTOR-6494](https://youtrack.jetbrains.com/issue/KTOR-6494))
* "ReferenceError: 'self' is not defined" when using URLBuilder in a custom JS engine ([KTOR-5978](https://youtrack.jetbrains.com/issue/KTOR-5978))
* MDC diagnostic value is changed during logging of the request ([KTOR-6528](https://youtrack.jetbrains.com/issue/KTOR-6528))
* WebSocket doesn't get terminated when runBlocking is used ([KTOR-6664](https://youtrack.jetbrains.com/issue/KTOR-6664))
* CIO: "getSubjectAlternativeNames(...) must not be null" error on Android when using CA without SAN since 2.3.5 ([KTOR-6396](https://youtrack.jetbrains.com/issue/KTOR-6396))
* RequestConnectionPoint should implement toString() ([KTOR-6577](https://youtrack.jetbrains.com/issue/KTOR-6577))

# 2.3.7
> Published 28 November 2023

### Bugfixes
* Server ContentNegotiation no longer allows multiple decoders for one Content-Type ([KTOR-5410](https://youtrack.jetbrains.com/issue/KTOR-5410/Server-ContentNegotiation-no-longer-allows-multiple-decoders-for-one-Content-Type))
* High Native Server Memory Usage ([KTOR-6321](https://youtrack.jetbrains.com/issue/KTOR-6321/High-Native-Server-Memory-Usage))
* WebSockets: Confusing error message when server doesn't respond with Upgrade ([KTOR-6397](https://youtrack.jetbrains.com/issue/KTOR-6397/WebSockets-Confusing-error-message-when-server-doesnt-respond-with-Upgrade))
* ContentNegotiation: Adding charset to content type of JacksonConverter breaks request matching ([KTOR-6420](https://youtrack.jetbrains.com/issue/KTOR-6420))

Aleksei Tirman's avatar
Aleksei Tirman включено в состав коммита
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
# 3.0.0-beta-1
> Published 23 November 2023

### Bugfixes
* OkHttp: SSE client throws confusing "Unexpected error" on non 200 status ([KTOR-6390](https://youtrack.jetbrains.com/issue/KTOR-6390))
* Logging plugin blocks response body streaming when level is BODY ([KTOR-6482](https://youtrack.jetbrains.com/issue/KTOR-6482))
* HttpResponseValidator consumes HTTP response body ([KTOR-4225](https://youtrack.jetbrains.com/issue/KTOR-4225))
* CIO: Unable to perform WebSocket upgrade when Content-Type header is sent in the request ([KTOR-6366](https://youtrack.jetbrains.com/issue/KTOR-6366))
* ContentNegotiation: Adding charset to content type of JacksonConverter breaks request matching ([KTOR-6420](https://youtrack.jetbrains.com/issue/KTOR-6420))
* DOS via OOM due to unbound request body size ([KTOR-2682](https://youtrack.jetbrains.com/issue/KTOR-2682))
* AcceptAllCookiesStorage ignores cookie's max-age ([KTOR-2023](https://youtrack.jetbrains.com/issue/KTOR-2023))
* Inconsistent behavior for different engines when exception is thrown in the writer of WriteChannelContent ([KTOR-3266](https://youtrack.jetbrains.com/issue/KTOR-3266))
* Server doesn't send a response when a status code is passed to call.respond and the custom serializer throws an exception ([KTOR-6150](https://youtrack.jetbrains.com/issue/KTOR-6150))
* contentLength() returns null on Android ([KTOR-1540](https://youtrack.jetbrains.com/issue/KTOR-1540))

### Improvements
* Kotlin/JS: Allow passing custom Agent ([KTOR-5861](https://youtrack.jetbrains.com/issue/KTOR-5861))
* Update Kotlin to 1.9.0 ([KTOR-6123](https://youtrack.jetbrains.com/issue/KTOR-6123))
* Update Kotlin to 1.9.20 ([KTOR-6447](https://youtrack.jetbrains.com/issue/KTOR-6447))
* Deprecate Locations with Level.ERROR ([KTOR-6029](https://youtrack.jetbrains.com/issue/KTOR-6029))
* HSTS plugin hard codes port 443 ([KTOR-4168](https://youtrack.jetbrains.com/issue/KTOR-4168))
* API to use java.nio.Path as resources ([KTOR-4275](https://youtrack.jetbrains.com/issue/KTOR-4275))
* Ability to serve static resources from a .zip file ([KTOR-6385](https://youtrack.jetbrains.com/issue/KTOR-6385))
* Make DefaultHeaders plugin Kotlin native compatible ([KTOR-6356](https://youtrack.jetbrains.com/issue/KTOR-6356))
* Disable compression for SSE requests ([KTOR-6327](https://youtrack.jetbrains.com/issue/KTOR-6327))
* Drop http timeout for sse requests ([KTOR-6312](https://youtrack.jetbrains.com/issue/KTOR-6312))
* Add deprecations for old IO API ([KTOR-6036](https://youtrack.jetbrains.com/issue/KTOR-6036))
* Drop old deprecations ([KTOR-6262](https://youtrack.jetbrains.com/issue/KTOR-6262))
* Drop actual modifier for Memory class in jvm for compatibility with K2 ([KTOR-6006](https://youtrack.jetbrains.com/issue/KTOR-6006))
* Remove @Suppress("NO_ACTUAL_CLASS_MEMBER_FOR_EXPECTED_CLASS") in preparation for Kotlin 2.0 ([KTOR-5824](https://youtrack.jetbrains.com/issue/KTOR-5824))
* Migrate client plugins to new API ([KTOR-6303](https://youtrack.jetbrains.com/issue/KTOR-6303))
* Jetty Server no idle timeout configuration possible ([KTOR-6288](https://youtrack.jetbrains.com/issue/KTOR-6288))
* AttributeKey equality comparison breaks type safety ([KTOR-6122](https://youtrack.jetbrains.com/issue/KTOR-6122))
* Darwin: Support accessing NSURLSessionDelegate ([KTOR-5688](https://youtrack.jetbrains.com/issue/KTOR-5688))
* Remove writing multipart data to temp file ([KTOR-5881](https://youtrack.jetbrains.com/issue/KTOR-5881))
* Netty: Allow listening only for HTTP/1.1 protocol SSL connections ([KTOR-6098](https://youtrack.jetbrains.com/issue/KTOR-6098))
* Persistent Cookie Storage: Make Cookie.matches and Cookie.fillDefaults methods public ([KTOR-6119](https://youtrack.jetbrains.com/issue/KTOR-6119))
* Decompressed response/request should unset Content-Encoding header ([KTOR-6080](https://youtrack.jetbrains.com/issue/KTOR-6080))
* renderSetCookieHeader shouldn't ignore maxAge = 0 ([KTOR-6007](https://youtrack.jetbrains.com/issue/KTOR-6007))
* Webjars plugin should include caching headers and ETag by default ([KTOR-6073](https://youtrack.jetbrains.com/issue/KTOR-6073))
* SessionsConfig.cookie problem with reified type argument ([KTOR-5905](https://youtrack.jetbrains.com/issue/KTOR-5905))
* Make LDAP Auth return generic Principal instead of UserIdPrincipal ([KTOR-793](https://youtrack.jetbrains.com/issue/KTOR-793))
* Logger name should be prefixed with io.ktor ([KTOR-938](https://youtrack.jetbrains.com/issue/KTOR-938))

### Features
* Add Server-sent events (SSE) plugin for client and support for OkHttp engine ([KTOR-505](https://youtrack.jetbrains.com/issue/KTOR-505))
* Client support for SSE plugin (CIO, Apache, Java) ([KTOR-5963](https://youtrack.jetbrains.com/issue/KTOR-5963))
* SSE plugin support in Js, Android, Curl, Darwin, WinHttp client engine ([KTOR-6217](https://youtrack.jetbrains.com/issue/KTOR-6217))
* Add Server-sent events (SSE) plugin for server ([KTOR-6172](https://youtrack.jetbrains.com/issue/KTOR-6172))
* Support UTF-8 BOM character ([KTOR-5812](https://youtrack.jetbrains.com/issue/KTOR-5812))
* Support Compression of Request Body with ContentEncoding Client Plugin ([KTOR-4502](https://youtrack.jetbrains.com/issue/KTOR-4502))

# 2.3.6
> Published 7 November 2023

### Bugfixes
* Resolved connectors job does not complete in TestApplicationEngine ([KTOR-6411](https://youtrack.jetbrains.com/issue/KTOR-6411))
* Darwin: Even a coroutine Job is canceled network load keeps high ([KTOR-6243](https://youtrack.jetbrains.com/issue/KTOR-6243))
* Darwin: EOFException when sending multipart data using Ktor 2.3.4 ([KTOR-6281](https://youtrack.jetbrains.com/issue/KTOR-6281))
* Ktor JS client unconfigurable logging in node ([KTOR-6275](https://youtrack.jetbrains.com/issue/KTOR-6275))
* CIO: getEngineHeaderValues() returns duplicated values ([KTOR-6352](https://youtrack.jetbrains.com/issue/KTOR-6352))
* "Server sent a subprotocol but none was requested" when using Node WebSockets ([KTOR-4001](https://youtrack.jetbrains.com/issue/KTOR-4001))
* YAML properties with literal value null cannot be read since 2.3.1 ([KTOR-6357](https://youtrack.jetbrains.com/issue/KTOR-6357))
* AndroidClientEngine cannot handle content length that exceeds Int range ([KTOR-6344](https://youtrack.jetbrains.com/issue/KTOR-6344))
* Client unable to make subsequent requests after the network disconnection and connection when ResponseObserver is installed ([KTOR-6252](https://youtrack.jetbrains.com/issue/KTOR-6252))
* Outdated Gradle jib plubin does not support application/vnd.oci.image.index.v1+json media type ([KTOR-6280](https://youtrack.jetbrains.com/issue/KTOR-6280))
* KTor 2.3.5 Kotlin 1.9.x upgrade is a breaking change ([KTOR-6354](https://youtrack.jetbrains.com/issue/KTOR-6354))
* WebSockets (CIO): Connection Failure Due to Lowercase 'upgrade' in 'Connection: upgrade' Header ([KTOR-6388](https://youtrack.jetbrains.com/issue/KTOR-6388))
* WinHttp: ArrayIndexOutOfBoundsException when sending WS frame with empty body ([KTOR-6394](https://youtrack.jetbrains.com/issue/KTOR-6394))
* Update dependency com.auth0:jwks-rsa to v0.22.1

# 2.3.5
> Published 5 October 2023

### Bugfixes
* 300+ ktor-client-java threads eat up lots of memory ([KTOR-6292](https://youtrack.jetbrains.com/issue/KTOR-6292))
* Apache5 engine limits concurrent requests to individual route to 5 ([KTOR-6221](https://youtrack.jetbrains.com/issue/KTOR-6221))
* DarwinClientEngine WebSocket rejects all received pongs ([KTOR-5540](https://youtrack.jetbrains.com/issue/KTOR-5540))

# 2.3.4
> Published 31 August 2023

### Bugfixes
* The "charset=UTF-8" part is automatically added to the `application/json` Content-Type ([KTOR-6183](https://youtrack.jetbrains.com/issue/KTOR-6183))
* MicrometerMetricsConfig default registry leaks coroutine ([KTOR-6178](https://youtrack.jetbrains.com/issue/KTOR-6178))
* Darwin: App hangs when sending a huge MultiPart request without access to network ([KTOR-6147](https://youtrack.jetbrains.com/issue/KTOR-6147))
* NPE in JavaClientEngine body() call ([KTOR-6190](https://youtrack.jetbrains.com/issue/KTOR-6190))
* Digest Auth: algorithm isn't specified in the Authorization header ([KTOR-3391](https://youtrack.jetbrains.com/issue/KTOR-3391))
* Confusing NoTransformationFoundException ([KTOR-6064](https://youtrack.jetbrains.com/issue/KTOR-6064))
* Cookie name-value pairs should be separated by a semicolon instead of a comma ([KTOR-5868](https://youtrack.jetbrains.com/issue/KTOR-5868))

Aleksei Tirman's avatar
Aleksei Tirman включено в состав коммита
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
# 2.3.3
> Published 1 August 2023

### Bugfixes
* java.util.zip.DataFormatException after enabling permessage-deflate ([KTOR-5979](https://youtrack.jetbrains.com/issue/KTOR-5979))
* DelegatingTestingClientEngine fails when ContentNegotiation with protobuf is installed and empty body ([KTOR-6125](https://youtrack.jetbrains.com/issue/KTOR-6125))
* KtorServlet does not support yaml configuration ([KTOR-6108](https://youtrack.jetbrains.com/issue/KTOR-6108))
* CIO ConnectionFactory leaks on cancellation ([KTOR-6127](https://youtrack.jetbrains.com/issue/KTOR-6127))
* staticFiles responds twice if both index and defaultPath are set ([KTOR-6120](https://youtrack.jetbrains.com/issue/KTOR-6120))
* Uncaught Kotlin exception: kotlin.IllegalArgumentException: Failed to open iconv for charset UTF-8 with error code 22 ([KTOR-5980](https://youtrack.jetbrains.com/issue/KTOR-5980))
* Not compatible with kotlinx-html 0.9.1 ([KTOR-6124](https://youtrack.jetbrains.com/issue/KTOR-6124))
* "Test engine is already completed" error while establishing Websockets connection ([KTOR-6057](https://youtrack.jetbrains.com/issue/KTOR-6057))
* s-maxage is not used, even if `HttpCache.Config.isShared` is true ([KTOR-6087](https://youtrack.jetbrains.com/issue/KTOR-6087))
* Cache returns null when vary header set different ways whatever it has same values ([KTOR-6081](https://youtrack.jetbrains.com/issue/KTOR-6081))
* DefaultRequest: a cookie appears twice in the request header when sending a request with another cookie ([KTOR-5619](https://youtrack.jetbrains.com/issue/KTOR-5619))

### Improvements
* Drop linuxArm64 publication from ktor-client-curl ([KTOR-6154](https://youtrack.jetbrains.com/issue/KTOR-6154))
* Client: Target linuxArm64 ([KTOR-872](https://youtrack.jetbrains.com/issue/KTOR-872))
* Server: Target linuxArm64 ([KTOR-5753](https://youtrack.jetbrains.com/issue/KTOR-5753))
* Add system property to disable automatic installation of runtime shutdown hook ([KTOR-6070](https://youtrack.jetbrains.com/issue/KTOR-6070))

Aleksei Tirman's avatar
Aleksei Tirman включено в состав коммита
502
503
504
505
506
507
508
509
510
511
512
513
514
# 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](https://youtrack.jetbrains.com/issue/KTOR-5728))
* MapApplicationConfig removes deeply nested properties when converting to a map ([KTOR-6013](https://youtrack.jetbrains.com/issue/KTOR-6013))
* Cache returns null when vary header has more fields in the cached response ([KTOR-6001](https://youtrack.jetbrains.com/issue/KTOR-6001))
* ContentType of a response body isn't set inside OkHttp's interceptor when a form request is sent ([KTOR-5971](https://youtrack.jetbrains.com/issue/KTOR-5971))

### Improvements
* Update Kotlin to 1.8.22 ([KTOR-6053](https://youtrack.jetbrains.com/issue/KTOR-6053))
* The error message is not helpful when authenticating with a bearer header with a colon ([KTOR-5409](https://youtrack.jetbrains.com/issue/KTOR-5409))

Aleksei Tirman's avatar
Aleksei Tirman включено в состав коммита
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
# 2.3.1
> Published 31 May 2023

### Bugfixes
* AndroidClientEngine: the engine double-parses query parameters before sending a request ([KTOR-5814](https://youtrack.jetbrains.com/issue/KTOR-5814))
* Flaky tests in WinHttp engine ([KTOR-5946](https://youtrack.jetbrains.com/issue/KTOR-5946))
* Electron/Node.js detection doesn't work correctly ([KTOR-5906](https://youtrack.jetbrains.com/issue/KTOR-5906))
* Curl sometimes fails with `API function called from within callback` ([KTOR-5918](https://youtrack.jetbrains.com/issue/KTOR-5918))
* Bearer auth token refresh hangs after prior refresh threw an exception ([KTOR-5879](https://youtrack.jetbrains.com/issue/KTOR-5879))
* HOCON: "No configuration setting found for key" error after merging ([KTOR-5895](https://youtrack.jetbrains.com/issue/KTOR-5895))
* Ktor Client Unable to Stream Responses in Javascript ([KTOR-5867](https://youtrack.jetbrains.com/issue/KTOR-5867))
* Darwin engine does not support streaming of request body ([KTOR-5899](https://youtrack.jetbrains.com/issue/KTOR-5899))
* The Logging plugin doesn't log full kotlinx deserialization errors ([KTOR-5421](https://youtrack.jetbrains.com/issue/KTOR-5421))
* XForwardedHeaders should set `remoteAddress` in addition to `remoteHost` ([KTOR-5786](https://youtrack.jetbrains.com/issue/KTOR-5786))
* Sessions: Set-Cookie is added on every api request ([KTOR-912](https://youtrack.jetbrains.com/issue/KTOR-912))
* RateLimitters for every request key live in memory forever ([KTOR-5872](https://youtrack.jetbrains.com/issue/KTOR-5872))
* Significant delay between getting a part and starting reading from its provider for multipart/form-data requests ([KTOR-5248](https://youtrack.jetbrains.com/issue/KTOR-5248))
* getTimeMillis has seconds precision on native ([KTOR-5878](https://youtrack.jetbrains.com/issue/KTOR-5878))
* A coroutine closed due to cancellation is considered by the JsWebSocketSession to be closed on failure ([KTOR-2932](https://youtrack.jetbrains.com/issue/KTOR-2932))
* WebSockets: requests to a non-existing route cause server to lock up after responding with 404 (potential DOS) ([KTOR-5829](https://youtrack.jetbrains.com/issue/KTOR-5829))
* testApplication: NPE when test server doesn't reply with an HTTP upgrade ([KTOR-5815](https://youtrack.jetbrains.com/issue/KTOR-5815))
* GMTDate timestamp doesn't reflect timezone when created using `Calendar.toDate` method ([KTOR-5813](https://youtrack.jetbrains.com/issue/KTOR-5813))

### Improvements
* Warn when the RateLimit plugin installed after the routing ([KTOR-5915](https://youtrack.jetbrains.com/issue/KTOR-5915))
* Allow access to RateLimiters related to call ([KTOR-5876](https://youtrack.jetbrains.com/issue/KTOR-5876))
* Multipart: Support not writing a temporary file for binary data ([KTOR-5864](https://youtrack.jetbrains.com/issue/KTOR-5864))
* Make System Property to Set outgoingToBeProcessed Size for WebSockets ([KTOR-5855](https://youtrack.jetbrains.com/issue/KTOR-5855))
* Support optional properties in YAML ([KTOR-5796](https://youtrack.jetbrains.com/issue/KTOR-5796))
* YAML config does not support reading variables from itself ([KTOR-5797](https://youtrack.jetbrains.com/issue/KTOR-5797))

Aleksei Tirman's avatar
Aleksei Tirman включено в состав коммита
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
# 2.3.0
> Published 19 April 2023

### Features
* Support loading multiple configuration files ([KTOR-5658](https://youtrack.jetbrains.com/issue/KTOR-5658))
* Static files filters or something similar to mod_rewrite ([KTOR-818](https://youtrack.jetbrains.com/issue/KTOR-818))
* Built-in support for HEAD requests for static files ([KTOR-4052](https://youtrack.jetbrains.com/issue/KTOR-4052))
* Ability to set Content-Type of static resource ([KTOR-2312](https://youtrack.jetbrains.com/issue/KTOR-2312))
* Support regex patterns in routing ([KTOR-5110](https://youtrack.jetbrains.com/issue/KTOR-5110))
* Support Flow in ktor-serialization ([KTOR-3788](https://youtrack.jetbrains.com/issue/KTOR-3788))
* Upgrade Client Apache Engine Version to use Apache 5 ([KTOR-4547](https://youtrack.jetbrains.com/issue/KTOR-4547))
* Support for CURLOPT_CAINFO and CURLOPT_CAPATH in ktor-client-curl ([KTOR-5614](https://youtrack.jetbrains.com/issue/KTOR-5614))
* Allow passing multiple acceptable content types to accept route selector ([KTOR-419](https://youtrack.jetbrains.com/issue/KTOR-419))
* Support `100 Continue` ([KTOR-829](https://youtrack.jetbrains.com/issue/KTOR-829))

### Improvements
* The '425 Too Early' status code is missing in the HttpStatusCode enum ([KTOR-4673](https://youtrack.jetbrains.com/issue/KTOR-4673))
* Feature request: SO_REUSEADDR option for embedded server ([KTOR-5529](https://youtrack.jetbrains.com/issue/KTOR-5529))
* Add opportunity to pass type info into WebSockets serializing methods ([KTOR-5740](https://youtrack.jetbrains.com/issue/KTOR-5740))
* Ktor JS websocket client unconfigurable logging ([KTOR-5456](https://youtrack.jetbrains.com/issue/KTOR-5456))
* Update JTE to 2.3.0 ([KTOR-5698](https://youtrack.jetbrains.com/issue/KTOR-5698))
* Update Kotlin to 1.8.10 ([KTOR-5544](https://youtrack.jetbrains.com/issue/KTOR-5544))
* Migrate to the new Kotlin JS IR backend ([KTOR-5543](https://youtrack.jetbrains.com/issue/KTOR-5543))
* Prefer Node instead of browser behavior ([KTOR-5650](https://youtrack.jetbrains.com/issue/KTOR-5650))
* Update reported dependencies ([KTOR-5662](https://youtrack.jetbrains.com/issue/KTOR-5662))
* AutoHead should dispose response body ([KTOR-5684](https://youtrack.jetbrains.com/issue/KTOR-5684))
* Add `append(String, List<String>)` overload to `FormBuilder` ([KTOR-5493](https://youtrack.jetbrains.com/issue/KTOR-5493))
* Support serving static files from resources in GraalVM native image ([KTOR-5580](https://youtrack.jetbrains.com/issue/KTOR-5580))
* Comparable HttpStatusCode ([KTOR-5629](https://youtrack.jetbrains.com/issue/KTOR-5629))
* Support preCompressed with resources ([KTOR-2677](https://youtrack.jetbrains.com/issue/KTOR-2677))
* Add shutdown configuration for engine in stop method ([KTOR-5560](https://youtrack.jetbrains.com/issue/KTOR-5560))
* Logging: Add filter/sanitization of sensitive headers ([KTOR-5523](https://youtrack.jetbrains.com/issue/KTOR-5523))
* Add resource route builders accepting typed body as second parameter ([KTOR-5589](https://youtrack.jetbrains.com/issue/KTOR-5589))
* CallLogging: add config to avoid logging static file request ([KTOR-5474](https://youtrack.jetbrains.com/issue/KTOR-5474))
* Update Tomcat to 10 ([KTOR-5266](https://youtrack.jetbrains.com/issue/KTOR-5266))
* Update Jetty to version 11 ([KTOR-5267](https://youtrack.jetbrains.com/issue/KTOR-5267))
* Update Parameters and Headers DSL to be consistent with stdlib ([KTOR-627](https://youtrack.jetbrains.com/issue/KTOR-627))
* Consider quoting `Boolean` during construction of multipart requests ([KTOR-5405](https://youtrack.jetbrains.com/issue/KTOR-5405))
* Simplify Static Content Plugin ([KTOR-5265](https://youtrack.jetbrains.com/issue/KTOR-5265))

### Bugfixes
* Websockets: connection should be failed immediately when no continuation frame goes after a fragmented text frame ([KTOR-5018](https://youtrack.jetbrains.com/issue/KTOR-5018))
* Websockets: Connection should be failed immediately, since all data frames after the initial data frame must have opcode 0 ([KTOR-5014](https://youtrack.jetbrains.com/issue/KTOR-5014))
* Websockets: Connection should fail immediately (1002/Protocol Error) when control frame has a payload with more than 125 octets ([KTOR-5006](https://youtrack.jetbrains.com/issue/KTOR-5006))
* Java engine: Websockets client sends two PONG frames for each PING frame from a server ([KTOR-5653](https://youtrack.jetbrains.com/issue/KTOR-5653))
* Websockets: Erroneous trace log about expired websocket pings ([KTOR-5672](https://youtrack.jetbrains.com/issue/KTOR-5672))
* DarwinClientEngine: a request deadlocks on macOS since 2.2.2 ([KTOR-5502](https://youtrack.jetbrains.com/issue/KTOR-5502))
* Requests don't match in nested Regex Routing ([KTOR-5750](https://youtrack.jetbrains.com/issue/KTOR-5750))
* IllegalArgumentException in Regex Routing ([KTOR-5748](https://youtrack.jetbrains.com/issue/KTOR-5748))
* Unneeded escaping in Regex Routing isn't processed ([KTOR-5746](https://youtrack.jetbrains.com/issue/KTOR-5746))
* Native: Read from a closed socket doesn't throw an exception ([KTOR-5093](https://youtrack.jetbrains.com/issue/KTOR-5093))
* Reading response of HEAD request breaks when Content-Length > 0 ([KTOR-5699](https://youtrack.jetbrains.com/issue/KTOR-5699))
* "Serializer for class 'Any' is not found" error when responding with Any type since Ktor 2.2.4 ([KTOR-5687](https://youtrack.jetbrains.com/issue/KTOR-5687))
* BearerAuthProvider: Token is being refreshed multiple times when queued call finishes with 401 after refresh token succeeds ([KTOR-5681](https://youtrack.jetbrains.com/issue/KTOR-5681))
* CIO: nmap crashes server with "SocketException: Invalid argument" error ([KTOR-5636](https://youtrack.jetbrains.com/issue/KTOR-5636))
* DigestAuthProvider: realm sent from the server doesn't participate in the computation of `response` ([KTOR-4514](https://youtrack.jetbrains.com/issue/KTOR-4514))
* OAuth2: "JsonObject is not a JsonPrimitive" error when server replies with nested JSON object on a token request ([KTOR-5669](https://youtrack.jetbrains.com/issue/KTOR-5669))
* CallLogging: logs caused by an exception are suppressed when mdc provider is configured ([KTOR-5665](https://youtrack.jetbrains.com/issue/KTOR-5665))
* Metrics: ClassCastException when the DropwizardMetrics plugin is installed after the MicrometerMetrics plugin ([KTOR-5595](https://youtrack.jetbrains.com/issue/KTOR-5595))
* ByteBufferChannel throws exception when HttpCache, ContentEncoding and onDownload are used ([KTOR-5532](https://youtrack.jetbrains.com/issue/KTOR-5532))
* runBlocking in TestApplicationEngine loses coroutineContext ([KTOR-5525](https://youtrack.jetbrains.com/issue/KTOR-5525))
* Incorrect handling of private cache directive in HttpCachePlugin ([KTOR-5570](https://youtrack.jetbrains.com/issue/KTOR-5570))
* The default implementation of challengeFunction is empty, causing no session users to access protected resources ([KTOR-5467](https://youtrack.jetbrains.com/issue/KTOR-5467))
* Wrong ContentType for .mjs files ([KTOR-5533](https://youtrack.jetbrains.com/issue/KTOR-5533))
* Non-standard `Content-Type` headers for static files ([KTOR-5311](https://youtrack.jetbrains.com/issue/KTOR-5311))
* CIO: Client fails to parse response without Content-Length, Connection headers and chunked transfer encoding ([KTOR-5327](https://youtrack.jetbrains.com/issue/KTOR-5327))
* Conflict between `ContentNegotiation` and `Mustache` plugins ([KTOR-5337](https://youtrack.jetbrains.com/issue/KTOR-5337))

Aleksei Tirman's avatar
Aleksei Tirman включено в состав коммита
614
615
616
617
618
619
620
621
622
623
624
625
626
# 2.2.4
> Published 28 February 2023

### Bugfixes
* Connect timeout is not respected when using the HttpRequestRetry plugin ([KTOR-5466](https://youtrack.jetbrains.com/issue/KTOR-5466))
* URLs with underscore fail to parse correctly in HTTP client request ([KTOR-5591](https://youtrack.jetbrains.com/issue/KTOR-5591))
* Routing: Wrong content-type results in 405 instead of 415 status code with two routes ([KTOR-5535](https://youtrack.jetbrains.com/issue/KTOR-5535))
* Compressing the response will result in unexpected ERROR log output after processing in the StatusPages ([KTOR-5510](https://youtrack.jetbrains.com/issue/KTOR-5510))
* Javadoc for Resources.kt cannot be compiled ([KTOR-5492](https://youtrack.jetbrains.com/issue/KTOR-5492))
* ContentNegotiation: The "charset=UTF-8" part is added for the Content-Type header ([KTOR-3799](https://youtrack.jetbrains.com/issue/KTOR-3799))
* kotlinx.serialization.SerializationException is lost for the classes that have generic type parameters ([KTOR-5448](https://youtrack.jetbrains.com/issue/KTOR-5448))
* OkHttp: Cancelling while writing to ByteWriteChannel when overriding WriteChannelContent causes propagation of CancellationException to a caller ([KTOR-5518](https://youtrack.jetbrains.com/issue/KTOR-5518))

Aleksei Tirman's avatar
Aleksei Tirman включено в состав коммита
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
# 2.2.3
> Published 31 January 2023

### Improvements

* ContentNegotiation: "Skipping because the type is ignored" log message is unclear ([KTOR-5479](https://youtrack.jetbrains.com/issue/KTOR-5479))
* Make OAuth2 functionality multiplatform ([KTOR-1144](https://youtrack.jetbrains.com/issue/KTOR-1144))
* Log HTTP request time ([KTOR-1250](https://youtrack.jetbrains.com/issue/KTOR-1250))
* Add Client Plugins Trace Logging ([KTOR-5264](https://youtrack.jetbrains.com/issue/KTOR-5264))

### Bugfixes

* FileStorage throws java.io.FileNotFoundException (File name too long) when request path is long ([KTOR-5443](https://youtrack.jetbrains.com/issue/KTOR-5443))
* HttpRequestRetry retries on FileNotFoundException thrown by FileStorage ([KTOR-5444](https://youtrack.jetbrains.com/issue/KTOR-5444))
* DropwizardMetricsPlugin logs status code incorrectly when is used together with StatusPages plugin ([KTOR-5420](https://youtrack.jetbrains.com/issue/KTOR-5420))
* Server ContentNegotiation no longer allows multiple decoders for one Content-Type ([KTOR-5410](https://youtrack.jetbrains.com/issue/KTOR-5410))
* Multipart File doesn't upload whole file, throws "Unexpected EOF: expected 4096 more bytes" for larger files ([KTOR-3455](https://youtrack.jetbrains.com/issue/KTOR-3455))
* Netty: Unable to set the `tcpKeepAlive` ([KTOR-5370](https://youtrack.jetbrains.com/issue/KTOR-5370))
* HOCON: CLI parameters don't override custom array properties since 2.1.0 ([KTOR-5100](https://youtrack.jetbrains.com/issue/KTOR-5100))

Aleksei Tirman's avatar
Aleksei Tirman включено в состав коммита
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
# 2.2.2
> Published 3 January 2023

### Improvements

* Resource annotation should be MetaSerializable ([KTOR-5397](https://youtrack.jetbrains.com/issue/KTOR-5397))
* The swaggerUI method is too restrictive and cannot be called inside a route ([KTOR-5307](https://youtrack.jetbrains.com/issue/KTOR-5307))
* Engine shutdown grace period and timeout are not configurable ([KTOR-5359](https://youtrack.jetbrains.com/issue/KTOR-5359))
* Allow specifying immutable in CacheControl ([KTOR-3757](https://youtrack.jetbrains.com/issue/KTOR-3757))

### Bugfixes

* Server cannot be started with the Swagger plugin ([KTOR-5308](https://youtrack.jetbrains.com/issue/KTOR-5308))
* Regression in 2.2.1: Got EOF but at least 0 bytes were expected ([5372](https://youtrack.jetbrains.com/issue/KTOR-5372))
* HttpRequestRetry: Memory leak of coroutines objects when using the plugin ([KTOR-5099](https://youtrack.jetbrains.com/issue/KTOR-5099))
* iOS unit test deadlocks with DarwinClientEngine ([KTOR-5332](https://youtrack.jetbrains.com/issue/KTOR-5332))
* Gzip encoding: IllegalStateException: Expected 112, actual 113 ([KTOR-5300](https://youtrack.jetbrains.com/issue/KTOR-5300))
* Netty, HSTS: UnsupportedOperationException is thrown when the server responds before HSTS plugin ([KTOR-5276](https://youtrack.jetbrains.com/issue/KTOR-5276))


Aleksei Tirman's avatar
Aleksei Tirman включено в состав коммита
667
668
669
670
671
# 2.2.1
> Published 7 December 2022

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

Aleksei Tirman's avatar
Aleksei Tirman включено в состав коммита
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
# 2.2.0
> Published 7 December 2022

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

Aleksei Tirman's avatar
Aleksei Tirman включено в состав коммита
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
# 2.1.3
> Published 26 October 2022

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

Alexey Tirman's avatar
Alexey Tirman включено в состав коммита
766
767
768
769
770
771
772
773
774
775
# 2.1.2
> Published 29 September 2022

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

Alexey Tirman's avatar
Alexey Tirman включено в состав коммита
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
# 2.1.1
> Published 6 September 2022

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

Alexey Tirman's avatar
Alexey Tirman включено в состав коммита
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
# 2.1.0
> Published 11 August 2022

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

Alexey Tirman's avatar
Alexey Tirman включено в состав коммита
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
# 2.0.3
> Published 28 June 2022

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

leonid.stashevsky's avatar
leonid.stashevsky включено в состав коммита
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
# 2.0.2
> Published 27 May 2022

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

Rustam's avatar
Rustam включено в состав коммита
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
# 2.0.1
> Published 28 April 2022

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

* # 2.0.0
> Published 11 April 2022

* HttpClient breaks permanently when certain exceptions occur while consuming ByteReadChannel ([KTOR-3140](https://youtrack.jetbrains.com/issue/KTOR-3140))
* Fix Dokka publication for 2.0.0 ([KTOR-4194](https://youtrack.jetbrains.com/issue/KTOR-4194))
* [Doc] invalid KDoc link for https://ktor.io/docs/http-client-engines.html#darwin ([KTOR-4165](https://youtrack.jetbrains.com/issue/KTOR-4165))
* Update the 'Manual Configuration' help link after the 2.0.0 release ([KTOR-3678](https://youtrack.jetbrains.com/issue/KTOR-3678))
* Where did 1.6.8 docs go? ([KTOR-4147](https://youtrack.jetbrains.com/issue/KTOR-4147))
* Fail to create response observer in different native thread. ([KTOR-3278](https://youtrack.jetbrains.com/issue/KTOR-3278))
* "Ktor app with Kotlin/Native fails with ""There is no event loop. Use runBlocking { ... } to start one.""" ([KTOR-4149](https://youtrack.jetbrains.com/issue/KTOR-4149))
* Update limitations for Kotlin/Native ([KTOR-4143](https://youtrack.jetbrains.com/issue/KTOR-4143))
* UDP sockets on native ([KTOR-1159](https://youtrack.jetbrains.com/issue/KTOR-1159))
* Ktor stopped working with latest Tomcat 9.0.39 ([KTOR-1172](https://youtrack.jetbrains.com/issue/KTOR-1172))
* Update to Kotlin 1.6.20 ([KTOR-4107](https://youtrack.jetbrains.com/issue/KTOR-4107))
* ContentNegotiation: the plugin removes Content-Type header even when a matching registration is not found ([KTOR-4091](https://youtrack.jetbrains.com/issue/KTOR-4091))
* JMXReporter not included in ktor-metrics:1.6.8 ([KTOR-4102](https://youtrack.jetbrains.com/issue/KTOR-4102))
* Performance Issue / Ktor & Netty ([KTOR-610](https://youtrack.jetbrains.com/issue/KTOR-610))
* httpMethod is not affected by X-Http-Method-Override (in opposite to docs) ([KTOR-404](https://youtrack.jetbrains.com/issue/KTOR-404))
* Android: Failed resolution of: Ljava/nio/file/Paths using API 25 and lower ([KTOR-3269](https://youtrack.jetbrains.com/issue/KTOR-3269))
* ContentNegotiation plugins don't accept null-responses from ContentConverts ([KTOR-3346](https://youtrack.jetbrains.com/issue/KTOR-3346))
* Using proguard and CallLogging feature causes JVM crashes ([KTOR-3345](https://youtrack.jetbrains.com/issue/KTOR-3345))
* Remove checking body transformation from ContentNegotation ([KTOR-3272](https://youtrack.jetbrains.com/issue/KTOR-3272))
* Feature: Use websockets with serialization ([KTOR-423](https://youtrack.jetbrains.com/issue/KTOR-423))
* Fix `testErrorHandling` with JS ([KTOR-3510](https://youtrack.jetbrains.com/issue/KTOR-3510))
* [netty] Headers are only flushed after first byte is written ([KTOR-3364](https://youtrack.jetbrains.com/issue/KTOR-3364))
* AttributeKey instance is identified by its identity instead of its name ([KTOR-3538](https://youtrack.jetbrains.com/issue/KTOR-3538))
* HttpCookies: parse / in the name of a cookie ([KTOR-3497](https://youtrack.jetbrains.com/issue/KTOR-3497))
* Returning Thymeleaf fragments from Routes ([KTOR-3624](https://youtrack.jetbrains.com/issue/KTOR-3624))
* Rewrite Thymeleaf to New Plugins API ([KTOR-3687](https://youtrack.jetbrains.com/issue/KTOR-3687))
* Rewrite HSTS to new plugins API ([KTOR-3752](https://youtrack.jetbrains.com/issue/KTOR-3752))
* Rewrite FreeMarker to new Plugins API ([KTOR-3751](https://youtrack.jetbrains.com/issue/KTOR-3751))
* Rewrite CachingHeaders to New Plugins API ([KTOR-3688](https://youtrack.jetbrains.com/issue/KTOR-3688))
* Implementation for Single Page Plugin ([KTOR-3635](https://youtrack.jetbrains.com/issue/KTOR-3635))
* Sockets no longer working on Android since 2.0.0-beta-1 ([KTOR-3659](https://youtrack.jetbrains.com/issue/KTOR-3659))
* Implementation for Single Page Plugin ([KTOR-3577](https://youtrack.jetbrains.com/issue/KTOR-3577))
* Content Negotiation: Gson: Should be able to return 400 for badly formatted request. ([KTOR-373](https://youtrack.jetbrains.com/issue/KTOR-373))
* Rewrite ConditionalHeaders to New  Plugins API ([KTOR-3759](https://youtrack.jetbrains.com/issue/KTOR-3759))
* Single Page Plugin ([KTOR-3531](https://youtrack.jetbrains.com/issue/KTOR-3531))
* HttpResponseValidator.handleResponseException should have access to request to provide valuable information in exceptions ([KTOR-3652](https://youtrack.jetbrains.com/issue/KTOR-3652))
* Build in feature for Single PAge Applications ([KTOR-515](https://youtrack.jetbrains.com/issue/KTOR-515))
* "ContentNegotiation: The ""charset=UTF-8"" part is added for the Content-Type header" ([KTOR-3799](https://youtrack.jetbrains.com/issue/KTOR-3799))
* Rewrite Netty Engine ([KTOR-3467](https://youtrack.jetbrains.com/issue/KTOR-3467))
* SinglePageApplication plugin returns 404 for non-existent paths ([KTOR-3944](https://youtrack.jetbrains.com/issue/KTOR-3944))
* Split packages in KTOR Client 2.00-BETA-1 ([KTOR-4106](https://youtrack.jetbrains.com/issue/KTOR-4106))
* Support WebSockets in Darwin engine ([KTOR-4093](https://youtrack.jetbrains.com/issue/KTOR-4093))
* Ktor http client with java engine uses incorrect timeout. ([KTOR-4058](https://youtrack.jetbrains.com/issue/KTOR-4058))
* ktor-client performance ([KTOR-506](https://youtrack.jetbrains.com/issue/KTOR-506))
* InvalidPathException in ApplicationEngineEnvironmentReloading ([KTOR-3831](https://youtrack.jetbrains.com/issue/KTOR-3831))
* "Screenshot with the new project wizard on the ""Create a new project"" topic is outdated" ([KTOR-4020](https://youtrack.jetbrains.com/issue/KTOR-4020))
* Add possibility to fully configure metricName in ktor-server-metrics-micrometer ([KTOR-3302](https://youtrack.jetbrains.com/issue/KTOR-3302))
* Adding Native support to ktor-server-html-builder for 2.0.0 release ([KTOR-3972](https://youtrack.jetbrains.com/issue/KTOR-3972))
* Ktor: Allow overriding coroutine dispatcher in MockEngine ([KTOR-3230](https://youtrack.jetbrains.com/issue/KTOR-3230))
* HttpClient request hangs when Logging plugin is installed ([KTOR-3970](https://youtrack.jetbrains.com/issue/KTOR-3970))
* Ktor uses too much memory compared to other Http server libraries ([KTOR-3903](https://youtrack.jetbrains.com/issue/KTOR-3903))
* [client] MPP WebSockets client ([KTOR-751](https://youtrack.jetbrains.com/issue/KTOR-751))
* Native websocket client support ([KTOR-599](https://youtrack.jetbrains.com/issue/KTOR-599))
* Don't perform migrations for MPP projects ([KTOR-3812](https://youtrack.jetbrains.com/issue/KTOR-3812))
* Change visibility from internal to public to HttpResponse and HttpClientCall ([KTOR-3984](https://youtrack.jetbrains.com/issue/KTOR-3984))
* Rename the 'header' function to 'allowHeader' for consistency with similar functions ([KTOR-3980](https://youtrack.jetbrains.com/issue/KTOR-3980))
* The CallID plugin missing in a New Project wizard ([KTOR-2911](https://youtrack.jetbrains.com/issue/KTOR-2911))
* IDEA plugin missing the Session authentication ([KTOR-3359](https://youtrack.jetbrains.com/issue/KTOR-3359))
* Install plugin completion doesn't work with custom built version of Ktor from main ([KTOR-4031](https://youtrack.jetbrains.com/issue/KTOR-4031))
* Memory leak when Compression plugin is installed ([KTOR-4028](https://youtrack.jetbrains.com/issue/KTOR-4028))
* Make most useful hooks public ([KTOR-3797](https://youtrack.jetbrains.com/issue/KTOR-3797))
Для ускорения просмотра не вся история отображается Просмотреть всю вину