Published 4 Dec 2018
- Client logging feature (
Logging
inktor-client-logging
) - Client user agent feature (see
UserAgent
) - Client top-level list serialization support (#739)
- JS client body handling fix (#746)
- Client redirect edge cases fixed
- Client close/cancel handling improved
- CIO client bugfixes
- Unicode filenames support in multipart fileupload (#757, #687, #596)
ContentNegotiation
andWebSocket
server features compatibility (#745)- Server session cookie duration is optional (#736)
- Server autreload support fixed (#736)
CachingOptions
resolution ambiguity fixed (#741)
Published 19 Nov 2018
- Improved documentation
- Improved performance
- Kotlin 1.3.10
- kotlinx.coroutines 1.0.1 and structured concurrency support:
- Coroutine scopes introduced per pipeline, call, application and web socket session
- Fixed client response cancelation via
receive<Unit>()
andresponse.cancel()
- Disabled client pipelining by default to provide safe behavior by default
GMTDate
improvements on js and native- Added client response observer for response logging purpose
- Test client and mock engine improvements
- Cookies dates, domains and dupicate parameters processing fixed
- Server pipeline fixed to discard request body if not used (#609, #574)
- Websocket session lifecycle fixed during close sequence
- Several
Url
andUrlBuilder
fixes and improvements - Introduced
ExpectSuccess
client feature - Fixed
StatusPages
to handle child job failures (#646) - Compression bugfixes (including #708, #685)
- Fixed timeouts in websockets with Jetty
- Renamed
DevelopmentEngine
toEngineMain
- Restricted
@Location
annotation targets, allow on a typealias (#539) - Removed default connector on port 80 (#670)
- Several JWT and OAuth bugfixes and error habdling improvements (#664, #676, #550)
- Improved serialization client feature
Published 19 Sept 2018
- Added shorthand client functions for HEAD, OPTIONS, PATCH and DELETE methods (#562)
- URLBuilder's parser improved (#553, #567)
- Improved client's cookie matching and processing
- Introduced CallId feature
- Added MDC support to CallLogging feature
- Fixed setting charset encoding for non-text content types
- Added
respondOutputStream { }
response function - Migrated to Kotlin 1.2.70
- Split Infrastructure phase into Monitoring and Features phases
Published 29 Aug 2018
- Added multiplatform client support (android and ios)
- Added
Android
client engine (UrlConnection
) - Added
OkHttp
client engine (Android support) - Added
Jackson
feature support - Added
Ios
client engine - Deprecated
response.contentType
andresponse.contentLength
- Strengthened
IncomingContent
deprecation - Upgraded Jetty ALPN, Tomcat
- Fixed config evaluation issues (#488)
- Disabled async incoming upgrade stream at Tomcat
- Prohibited appending unsafe headers to request headers
- Renamed
XForwardedHeadersSupport
toXForwardedHeaderSupport
(#547) - Added
HttpResponse.receive<T>
method to run response pipeline on raw response - Introduced kotlin multiplatform url-parser
- Supported client form data and multipart
- Added missing client builders for
post
andput
methods - Simplify client configuration API
- Fixed several compression issues
- Fixed client attributes evaluation
- Fixed CIO engine random algorithm selection
- Fixed url parsing (#511)
- Fixed ambiguity in writing client
Content-Type
andContent-Length
headers - Minor performance fixes
- Netty HTTP/2 fixes
- Fixed IOOBE in satic resource resolution (#493)
- Fixed JWT error handling
- Kotlin 1.2.61, kotlinx.coroutines 0.25.0
Published 26 Jun 2018
- Improved WebSocket API
- Websocket header
Sec-WebSocket-Key
is now optional - Fixed client cookies rendering to avoid
x-enc
- Fixed plain text client reader (#392)
- Added EC support in CIO TLS (#394: ECDHE_RSA_AES256_SHA384, ECDHE_RSA_AES128_SHA256)
- Fix client certificate validation
- Introduced optional authentication
- Added
ApplicationCall
as receiver for authvalidate
functions - Introduced
call.respondBytes
(#395) - Improved JWT support: multiple schemes, nullable issuer
- Conversion service enum type diagnostics improved (#403)
- Avoided using apos entity in HTML escaping as IE doesn't support it (#400)
- Converter support for java big numbers
- Ability to add auth methods to existing feature on the fly
- Improved auth header scheme and contents validation (#415)
- Default charset for BasicAuth is now UTF-8 (#420)
- Added
ByteArrayContent.contentLength
(#421) - Fixed
headersOf
case insensitive issue (#426) - Client deserialization improved by using type token
- Ability to disable client default transformers
- Explicit
Accept
header in client request - Turn on masking in client websockets (#423)
- Fixed inverted
PartialContent.Configuration.maxRangeCount
check (#440) - Fixed uncaught
UnsupportedMediaTypeException
fromreceiveOrNull()
(#442) - Fix multipart boundary header parsing
- Upgraded jwks/jwt, applied RSA256 by default if unspecified (#434, #435)
- Upgrade coroutine version to 0.23.3
- Upgrade Jetty version to 9.4.11.v20180605
- Add
client-mock-engine
for testing purpose - Use default available engine by deafult
- Upgrade kotlin to 1.2.50
Move ktor-samples to a separate repository (#340). https://github.com/ktorio/ktor-samples
Published 23 Apr 2018
- New auth DSL, more suspendable functions (such as
verify
/validate
) RoutingResolveTrace
for introspecting routing resolution process- HTTP client improvements and bugfixes (DSL, reconnect, redirect, cookies, websockets and more)
- CIO http client pipelining support, chunked and more
- CIO initial TLS support
- Session authentication provider
- OAuth2: introduce ability to generate and verify state field
- OAuth: fix scopes parameter to conform to RFC (#329)
- OAuth2: fix bug with double scopes encoding (#370)
- OAuth2: add ability to intercept redirect URL
- CORS: introduce
allowSameOrigin
option - Auth: provide application call as receiver for validate functions (#375 and related)
- Test host reworked,
handleRequest
reads the body and redirects the exceptions correctly - Servlets: fixed
inputStream
acquisition, fixed error handling - Java 9 compatibility improved (no modules yet)
- Digest auth fixes (#380)
- Log running connectors details for better development experience (#318)
Last-Modified
header and related functionality to work in proper GMT time zone (#344)IncomingContent
is deprecatedURLBuilder
fixes and improvements- Documentation improvements
- Performance optimizations (Netty, CIO server backends)
- CIO server improved stability
- Encrypted session support (
SessionTransportTransformerEncrypt
) - Empty (
null
) model for freemarker (#291) ContentNegotiation
missingAccept
header support (#317)
Published 29 Jan 2018
- Support for blocking servlets and GAE
Headers
andParameters
types instead ofValuesMap
- Velocity templates support
- Unsafe (Forbidden) headers checks added
- Deprecated
Resource
type - Added support for extensible version providers to ConditionalHeaders feature
- Engine-specific configuration support for application.conf
- Added filtering and customisation of log level to CallLogging feature
- Added ability to skip authentication using a predicate, add documentation to Authentication feature
- Introduced auth0 JWT/JWKS authentication (#266)
- ktor http client DSL improvements
- CIO engine improvements, stability and performance
- Introduced [OutgoingContent] properties
contentLength
,contentType
andstatus
- Upgrade Netty in the corresponding engine implementation
- Introduced
shareWorkGroup
option for Netty engine - More documentation
- Bump versions of dependencies
Published 31 Oct 2017
- Package structure reworked
- Packages and maven groupId renamed org.jetbrains.ktor -> io.ktor
- Server-related artifacts having ktor-server-* name prefix (ktor-netty -> ktor-server-netty)
- Application Host renamed to Application Engine
- FinalContent renamed to OutgoingContent as opposite to IncomingContent (introduced in 0.4.0)
- Added Application Engine configure facilities so one can specify thread pool size or some engine-specific parameter
- Initial idiomatic ktor HTTP client implementation (artifacts prefixed with ktor-client-*)
- Metrics support, DropWizard integration
- Improve routing API, tune resolution mechanics, hide some implementation details
- ContentNegotiation feature to support variable content on send and receive
- Jackson support
- Experimental pure kotlin application engine on coroutines (CIOApplicationEngine) and CIO-based http client backend
- Improved stability under load
- Status pages processing improvements
- A lot of documentation
Published 16 Aug 2017
- Built with Kotlin 1.1.4
- Refactored receive/response pipelines and moved them into respective ApplicationRequest & ApplicationResponse classes
- Fixes, improvements and integration tests for HTTP/2 support
- Update
ContentType
to treat all parts case insensitively - Remove
ApplicationLog
and use SLF4JLogger
directly - Add HttpMethod.Patch and respective builder functions
routing
function will now installRouting
feature or use existing installed feature for easier modules- Convert sessions to proper feature, support multiple sessions, improve DSL
- HeadRequestSupport feature is renamed to AutoHeadResponse (with deprecated typealias)
- Replace ApplicationTransform with receive pipeline
- Introduce send/receive pipelines for all call pipelines
- Gson application feature for JSON transformation of incoming & outgoing data objects
- Added HttpBin sample (thanks to @jmfayard)
- Employ
DslMarker
annotation to prevent accidental use of route functions in get/post handlers - Improve diagnostics for untransformed content
- Ensure missing file (
FileNotFoundException
) can be handled properly withStatusPages
feature - Websocket fixes for large frames, fragmentation and more
- Support for specifying config file with command line
- Improvements in Servlet-based hosts
- Memory allocation and performance optimisations
- Add Apache 2 LICENSE file
- Add documentation to some types
- New sample for static content
- Bump versions of dependencies
Published 22 Jun 2017
- Execution model slightly changed to avoid global executors. ApplicationEnvironment doesn't provide
executor
anymore - Websockets refactored with channels instead of callback functions
- Fixed bug with compression not preserving status code (thanks Diego Rocha)
- Fixes in Netty support: performance issues under heavy load and keep-alive connections, cancellation, closed sockets
- Fixes in session serialization, enums support
- Optimisations in Servlet and Jetty hosts, fixes in edge cases
- Fixes in chat sample
Published 24 Apr 2017
- Fix bug in byte array response that missed Content-Length header
- Fix default encoding in FreeMarker to be UTF-8
- Fix FreeMarker writer
- Fix charset for text/* content types to be UTF-8 by default
- Fix Kweet sample application in kweet deletion
- Fix form authentication to adhere to removal of post parameters from
parameters
- Rework static content DSL to improve usability
- Improve Accept header handling in routes
- Support local class in locations, improve diagnostics
- Add servlet host tests running in Jetty, but using servlet deployment model
- Benchmarks can now measure GC performance (and any other JMH profiler)
- Performance optimisations
Published 7 Apr 2017
- Replace routing function
contentType
withaccept
- Major refactoring in internal host system to simplify and unify code
- Use
embeddedServer(Netty, …)
instead ofembeddedNettyServer(…)
- Support automatic reloading in embedded hosts
- Fix ApplicationTransform problems preventing Freemarker templates from working
- Use
- Fix json and logback dependencies to avoid propagating to clients
- Bug fixes & performance optimisations
- Documentation
Published 8 Mar 2017
- Major refactor to coroutines