Version History
Display: |
v3.29
- New : WebSockets support allows developers to implement real-time, bidirectional communication from servers created with TMS Sparkle. This feature enables server-side HTTP connections to be upgraded to WebSocket connections, facilitating low-latency data transfer between clients and servers.
v3.28
- Fixed : THttpClient failing to decompress a gzip response due to a change behavior in TZDecompressionStream in Delphi 12.1. Ticket #23535
- Fixed : Encryption middleware was not correctly behaving when response body was empty.
v3.27.0.1
- New : THttpRequest.OwnsContentStream property.
- Improved : Modified logic for sending content using WinHttp, it was not working for the rare stream implementations that return a different number of bytes than requested even when stream data reading was not finished.
v3.26
- New : Delphi 12 support.
v3.25.0.0
- New : THttpRequest.ContentStream allows sending body via stream.
- Improved : Support for ARM64 macOS and ARM64 iOS Simulator platforms.
v3.24
- Fixed : Static module not properly responding index files (index.html) when RootDir property had a relative folder.
- Fixed : JWT middleware was sending response body on authorization errors even for HEAD requests.
v3.23
- Improved : TSparkleJwtMiddleware.BeforeValidation event allows adding custom JWT validation rules.
- Improved : Compress middleware now only compress response if the content is effectively compressible (text content type, javascript, JSON or XML).
- Improved : Compress middleware now adds Vary header to the response for better caching of compressed and uncompressed responses.
- Improved : Compress middleware does not compress if cache-control HTTP header is no-transform, or if content-range header is present.
- Fixed : Middleware logging format string was wrongly parsed when a macro with parameter was close to another without any spaces (for example, :req[content-type]:req[content-type].
- Fixed : HTTP client not correctly processing compressed responses (only relevant when accessing the in-process server).
v3.22
- Improved : Design-time components were greyed out in component palette if current platform was different than Win32.
v3.21
- New : TTenantMiddleware.DomainMap property now allows choosing the tenant based on the requested domain in URL.
- Improved : BREAKING CHANGE JWT is now requiring secret with a minimum size. If you use a secret that is smaller than the minimum size, you should set JWT Middleware property TSparkleJwtMiddleware.?Skip?KeyValidation to True.
v3.20
- New : TSparkleLogging?Middleware.?Error?Response?Options property.
- New : TSparkleJwtMiddleware improved with new following properties: AllowedClockSkew, RequireExpiration?Time, RequireIssuedAt, RequireNotBefore, ExpectedAudiences and ExpectedIssuers.
- New : JWT (JOSE) for Delphi units updated. You can now use RSA and ECDSA signing algorithms for both singing new JWT and also verify existing JWT signatures.
-
Improved : TSparkleUtils.GetQueryParams return type changed from TArray
> to TArray . - Fixed : TStaticModule/TSparkleStaticServer folder redirect was not working correctly when the URL had query or fragment parameters.
- Fixed : JWT middleware raising error 500 (instead of 400) for internal errors.
v3.19
- New : TTenantMiddleware retrieves a tenant id from several input formats (header, query URL) and set the tenant id in the HTTP context.
- New : TJwtMiddleware.OnGetSecretEx event allows providing the JWT secret dynamically based on the JWT token content itself.
- New : TJwtMiddleware.OnForbidRequest allows configuring which requests will be rejected or approved based on the existing JWT data.
- Fixed : THttpServerContext.Data and Item properties not working in Indy-based servers.
- Fixed : Memory leak when performing HTTP request using THttpClient in Android devices (introduced with the end of ARC in Sydney 10.4).
- Fixed : Forward middleware was showing up in the form as a non-visual component at design-time.
- Fixed : Better error handling when performing HTTP requests using THttpClient on Android. Sometimes Android app was crashing or displaying a blank error message when the request failed.
v3.18
- New : THttpEngine.CreateEngineFunc provides a way for client applications to use their own HTTP client engine.
- New : Sparkle.App.Console unit provides read-to-use server hosting app for Linux/Windows.
- New : Sparkle.App unit provides ready-to-use server hosting app for Windows, making a single app to work as both VCL desktop (for development purposes) and Windows service (for deployment purposes).
- New : Sparkle.App supports automatic package dynamic loading of server modules.
- New : Demo application showing Sparkle.App capabilities.
- New : Delphi 11 support.
v3.17
- Improved : Underlying Web Broken TWebContext now accessible through a public property in the context object of the Web Broker dispatcher.
- Improved : Improvements in TUri class and added a new IUri interface.
v3.16
- New : Forward middleware processes x-forwarded-* headers for improved behavior of Sparkle servers behind reverse or edge proxies.
- New : "Sparkle app" demo shows how to create a Windows application working as both VCL application or Windows service.
- Fixed : Sparkle URI information now correctly provides host information when host is IPv6 format (between brackets). Windows client also working correctly when URI uses IPv6 host.
v3.15
- New : Data, Item and Current properties in THttpServerContext makes it very easy to write and read custom data to the request that can be used through middleware items and modules.
- Fixed : JSON reader couldn't read content with a single byte (like 0 for example).
v3.14
-
New : TStaticModule.FolderUrlMode allows you to control how redirects work in URL representing folders. When user access an URL like
/foldername or /foldername/, static module will check this property to decide if both addresses are different or one show redirect to the other.
v3.13
- Improved : TSparkleHttpSysDispatcher.HttpSys property allows access to the internal underlying THttpSysServer object.
- Fixed : JWT middleware was returning status code 400 instead of 401 when the JWT sent by the client was invalid (regression).
v3.12
- New : Support for Delphi 10.4 Sydney.
- Fixed : TXDataset.AutoApply property not working when the key field itself was modified.
v3.11
- Fixed : Sporadic Access Violation when removing a middleware from the middleware list at design time.
v3.10
- New : Encryption middleware allows using custom cryptographic algorithm to encrypt request and response data. A new demo EncryptionMiddleware is included to show the capabilities.
- Improved : THttpResponse now implements IHttpResponse. You can use it as an interface to benefit from automatic referent counting.
- Improved : Multilogger allows adding more output handlers calling RegisterTMSLogger multiple times to add several output handlers at different points of application initialization.
- Fixed : THttpResponse.ContentAsBytes can now be read multiple times.
- Fixed : THttpRequest.RemoteIp property was returning empty when using Indy-based servers.
v3.9
- New : Support for Android 64-bit platform (Delphi 10.3.3 Rio).
- Fixed : Logging middleware not logging headers (req[header-name]) in mobile platforms.
v3.8
- Fixed : Logging middleware was not logging messages when the associated Sparkle module was not explicitly closing the request.
- Fixed : Logging middleware was not logging messages if an active TXDataServer was stopped and restarted a second time.
v3.7
- Improved : Indy-based dispatcher now provides the correct URL scheme (http/https) and in consequence the correct default port (80 or 443) in the request URL. When receiving request through the Indy dispatcher, previous versions could not tell if the request was being made through HTTP or HTTPS protocol. The side effect was that the request URL schema was always being considered as HTTP and the port being 80. This is now improved, and if the request is coming via HTTPS, the default port of the request URL is now 443.
v3.6.1
- New : macOS 64 support (Delphi Rio 10.3.2)
v3.6
- New : OnFilterLogEx event in logging middleware provides additional information and allows logging messages using different log levels depending on the request/response data.
- New : Multilogger demo shows the mechanism of using multiple named loggers.
- New : Logging mechanism now support named loggers and allow different outputs to be configured for different loggers.
- New : LogLevel and ExceptionLogLevel properties in TLoggingMiddleware allows configuring the default log level for log messages generated by the middleware.
- Fixed : Workaround memory leaks in Android HTTP client for Delphi Tokyo and up.
v3.5
- Fixed : WinHTTP API import function WinHttpGetProxyForUrl had an incorrect signature.
v3.4
- New : Logging middleware allows logging HTTP requests and responses processed by Sparkle servers. It uses the new logging framework and can automatically log requests/responses in details with a few lines of code.
- New : Logging framework - including TMS Logging - allows easy server-side logging to several output handlers like text files, Windows Event Log, TCP/IP listeners, etc.
v3.3
- New : TSparkleHttpSysDispatcher.OnStart and OnStop events.
- New : Design-time Generic Middleware allows adding middleware custom code using the design-time middleware editor, as a RAD alternative to creating a custom middleware from code.
- Improved : Design-time middleware editor now displays the name of middleware components in the list, avoiding ambiguous names.
v3.2
- New : THttpClient.OnResponseReceived event, fires when an HTTP response is received from server.
v3.1
- New : Support for Delphi 10.3 Rio.
- New : Sample project for file upload handling. A new project FileUploadSample included in demos folder shows how to use TMultipartFormDataReader to receive files from clients.
- Improved : TStaticModule.LastModified property enables the inclusion of Last-Modified header in the response (improves caching).
- Fixed : TMultipartFormDataPart.FileName property automatically dequotes string.
v3.0
- New : Smooth support for handling multipart/form-data content with new TMultipartFormDataReader class.
- New : Design-time support with new set of components for Sparkle: TSparkleGenericServer and TSparkleStaticServer components, and design-time middleware editor.
- Fixed : TIndySparkleHTTPServer not properly handling requests with content-type application/x-www-form-urlencoded.
- Fixed : JWT expiration dates were not being saved in UTC.
v2.7
- New : TJwtMiddleware.AllowExpiredToken and ForbidAnonymousAccess properties.
- New : TCorsMiddleware middleware makes it straightforward to add CORS support to any Sparkle module.
- Improved : Wizard now adds (commented) CORS and Compress middleware in source code. Uncomment to use them.
- Improved : THttpSysContext.SysRequest property made public allowing low-level access to http.sys raw request
- Improved : Better error messages for iOS/Mac http client
v2.6
- New : THttpSysServer.KeepHostInUrlPrefixes property.
- Improved : Windows HTTP client now decompresses deflate/gzip responses automatically at OS level (Windows 8.1 and up).
- Improved : THttpClient automatically decompresses responses encoded with gzip or deflate.
- Improved : Documentation update with example on how to ignore self-signed certificates when using HTTP client on Windows.
- Fixed : THttpResponse.ContentLength returning wrong value on Windows when response body size was greater than 2Gb.
v2.5
- New : TIndySparkleHTTPServer Indy-based web server component allows use of XData/RemoteDB and any other Sparkle-based module to use Indy.
- Fixed : Range Check Error in PercentEncode function when compiler range check option was enabled.
- Fixed : Memory leak in Compress middleware if client was disconnected before server response was completed.
- Fixed : HEAD requests sent by the server were causing a timeout in the very next request sent by the same client.
- Fixed : Error not found (404) when request URL had a query parameter with an URL address.
v2.4.2
- Fixed : ContentLength was being set to 0 when calling THttpServerResponse.Close with no content.
v2.4.1
- Fixed : Sparkle/XData servers retrieving wrong content from client request on Linux using Web Broker (regression).
v2.4
- Improved : THttpServerRequest.ContentStream now provides correct value for Size property if request has a ContentLength header.
- Fixed : When port of requested URL was different from port of server side module URL, the module was responding with 404 (not found) response.
- Fixed : Sparkle HTTP Client was is now merging multiple HTTP headers (with same name) sent by the server. Previously it was keeping only the last one.
v2.3
- New : Linux support using Delphi 10.2 Tokyo and later. You can now use Sparkle modules on Linux, through Apache modules created using WebBroker.
- New : In-process server.
- Fixed : Memory leak in Android HTTP client.
- Fixed : HTTP client issue on Android in Delphi Tokyo.
- Fixed : Error when using some UTF8 characters in URL like "ç" or "ã", even when percent encoded.
v2.2
- New : Option for custom proxy configuration for Windows clients or automatic proxy detection on Windows 8.1 and later
- New : Delphi 10.2 Tokyo Support
v2.1
- New : TStaticModule for serving static files
v2.0.1
- Improved : Minor source code modifications for compatibility with TMS XData 2.1.
v2.0
- New : JWT (JSON Web Token) authentication middleware (XE6 and up)
- New : JSON Web Token library for creating and validating tokens (based on the Delphi JOSE and JWT Library: http://github.com/paolo-rossi/delphi-jose-jwt)
- New : IsFloat and IsInt64 methods in TJsonReader class
- New : Delphi 10.1 Berlin support
- New : Basic authentication middleware
- New : Authentication and authorization mechanism
- Improved : Json Reader and Writer supports reading/writing literal values (JSON values that are neither object or array)
v1.4
- New : TWinHttpRequest.BeforeWinHttpSendRequest event allow low level setting of WinHttp options
- New : Middleware system provides a modular way to add custom request and response processing
- New : Design-time wizard to create a Sparkle Server easily with a few clicks.
- New : Compress Middleware provides automatic gzip/deflate response based on request headers
- Fixed : Response.Close not working correctly with chunked responses
- Fixed : Error when sending non-chunked responses with size greater than 2Gb
v1.3.1
- New : Delphi 10 Seattle support
v1.3
- New : THttpClient.OnSendingRequest event provides an opportunity to customize request, for example adding custom headers
v1.2.4
- Improved : Better handling of URI percent encoding/decoding
v1.2.3
- New : Support for Delphi XE8
v1.2.2
- Improved : Support THttpMethod.Options new type allows easier implementation of handling Http OPTIONS requests
- Fixed : THttpServerRequest.RawMethod property empty when request had non-standard http methods
- Fixed : Support for modules that respond to root URL addresses
v1.2.1.1
- Improved : Installer
v1.2.1
- Fixed : Mac/iOS HTTP Client was setting content-type to x-www-form-urlencoded automatically (inconsistent with other clients)
- Fixed : Issues with floating-point numbers in JSON reader/writer in non-English systems
v1.2
- New : TMSHttpConfig tool to configure URL reservations and HTTPS certificates using a friendly GUI
- New : THttpSysServerConfig class methods and properties for configuring URL reservation and HTTPS certificates from Delphi source code
- New : TAnonymousServerModule class to easily create a server modules with very simple request processing
- Improved : TJsonReader doesn't raise an exception if input stream is empty, it stays in EOF state instead
- Fixed : Possible wrong module routing when modules share same path segments at different ports
v1.1.1
- New : Added Delphi XE7 support
v1.1
- New : THttpServerRequest.RemoteIP provides the server with the IP address of client which sent request to the server
- New : THttpRequest.Timeout property allows specifying a different timeout value for each request
- New : Patch value in THttpMethod enumeration type to check for PATCH requests
- New : JSON classes for reading and writing JSON now fully documented
- Improved : More detailed error messages in JSON reader when reading fails
- Improved : Error messages now explain detailed reason why HTTPS connection fails in Windows clients either due like invalid server certificate, expired certificate, or other reasons.
- Fixed : JSON writer wrongly escaping of Unicode control characters
v1.0.1.0
- New : Delphi XE6 support
v1.0.0.0
- First release
Pricing
Single Developer License
Small Team License
Site License
TMS BIZ Essential
€ 395
€
120
yearly renewal
license for 1 developer
TMS BIZ Standard
€ 495
€
150
yearly renewal
license for 1 developer
MOST POPULAR
TMS BIZ Premium
€ 595
€
180
yearly renewal
license for 1 developer
BEST VALUE
All prices excl. VAT. Renewal price is subject to change and only valid up to 30 days after license has expired. After renewal period a discount price is offered to renew the license.