Release 4.1
-------------------

This is the first stable (GA) release of HttpAsyncClient 4.1. Notable features and enhancements 
included in 4.1 series are:

* Support for pipelined request execution 

* Support for the latest HTTP state management specification (RFC 6265). Please note that the old 
cookie policy is still used by default for compatibility reasons. RFC 6265 compliant cookie 
policies need to be explicitly configured by the user. Please also note that as of next feature 
release support for Netscape draft, RFC 2109 and RFC 2965 cookie policies will be deprecated 
and disabled by default. It is recommended to use RFC 6265 compliant policies for new applications 
unless compatibility with RFC 2109 and RFC 2965 is required and to migrate existing applications 
to the default cookie policy.

* Enhanced, redesigned and rewritten default SSL hostname verifier with improved RFC 2818
compliance

* Default SSL hostname verifier and default cookie policy now validate certificate identity 
and cookie domain of origin against the public suffix list maintained by Mozilla.org
<https://publicsuffix.org/list>

* Authentication cache thread-safety: authentication cache used by HttpClient is now thread-safe
and can be shared by multiple threads in order to re-use authentication state for subsequent
requests


Changelog:
-------------------

* [HTTPASYNC-90] Fixed SNI support.
  Contributed by David <dblack at atlassian.com>

* [HTTPASYNC-88] persistent connections can time out while kept alive in the pool
  causing unexpected SocketTimeoutException
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPASYNC-86]: fixed a race condition upon connection lease from the connection pool:
  in very rare  circumstances the main execution thread can get jammed for so long
  that the I/O dispatch thread succeeds in completing the request and releasing the connection
  while the main still is performing connection validation.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Update Apache Commons Logging version from 1.1.3 to 1.2. 
  Contributed by Gary Gregory <ggregory at apache.org>


Release 4.1 BETA1
-------------------

This is the first BETA release of HttpAsyncClient 4.1. Notable features and enhancements included
in 4.1 series are:

* Support for pipelined request execution 

* Enhanced redesigned and rewritten default SSL hostname verifier with improved RFC 2818
compliance

* Default SSL hostname verifier and default cookie policy now validate certificate identity 
and cookie domain of origin against the public suffix list maintained by Mozilla.org
<https://publicsuffix.org/list>

* Authentication cache thread-safety: authentication caches used by HttpAsyncClient is now 
thread-safe and can be shared by multiple contexts in order to re-use authentication state for 
subsequent requests


Release 4.0.2
-------------------

HttpAsyncClient 4.0.2 (GA) is a bug fix release that addresses several issues reported since 
release 4.0.1. This release also upgrades HttpClient dependency to the latest stable version. 

All users of HttpAsyncClient 4.0 are strongly advised to upgrade.

Changelog
-------------------

* [HTTPASYNC-79] Rearranged sequence of operations upon connection lease to eliminate possibility
  of a connection leak due to race condition on keep-alive boundary
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Replaced dynamic proxies with custom proxy classes to reduce thread contention.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPASYNC-73] Original request headers are not copied upon redirect
  Contributed by Oleg Kalnichevski <olegk at apache.org>



Release 4.0.1
-------------------

This maintenance release fixes a number of bugs including incorrect OSGi bundle metadata
found since release 4.0. This release also upgrades HttpCore and HttpClient dependencies to 
the latest stable versions. 

All users of HttpAsyncClient 4.0 are advised to upgrade.

Changelog
-------------------

* [HTTPASYNC-69] Premature cancellation of the response consumer to immediately shut down
  and release the underlying connection.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPASYNC-68] Connection closed by the opposite endpoint immediately upon its lease from
  the pool is never released back and reclaimed by the pool (collection leak).
  Contributed by Dmitry Potapov <potapov.d at gmail.com>

* Persistent connections always get discarded in case of a response future cancellation
  even if they can be kept alive.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPASYNC-64] Race conditions in async caching module.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPASYNC-65] Relaxed OSGi dependency import version ranges
  Contributed by Christian Schneider <chris at die-schneider.net> 

* [HTTPCLIENT-1446] NTLM proxy + BASIC target auth fails with 'Unexpected state:
  MSG_TYPE3_GENERATED'.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPASYNC-63] ConnectionShutdownException thrown in case of out-of-sequence response.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCLIENT-1442] Authentication header set by the user gets removed in case
  of proxy authentication.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPASYNC-60] Fixed incorrect OSGi Symbolic-BundleName.
  Contributed by M. van Cuijk <mark at phedny.net>



Release 4.0
-------------------

This is the first stable (GA) release of Apache HttpAsyncClient 4.0. HttpAsyncClient is a library 
for asynchronous client-side HTTP communication built on top of HttpCore NIO transport. 
It is a complementary library to Apache HttpClient intended and optimized for special cases 
whereby ability to scale to many thousands of concurrent connections is more important than 
performance in terms of raw data throughput. 

HttpAsyncClient 4.0 is designed to have similar APIs as Apache HttpClient 4.3 and a comparable
feature set. In addition HttpAsyncClient provides full support for zero-copy file upload and 
download operations. It presently does not support transparent content decompression and automatic 
I/O error recovery. These features may be added in future releases.


Changelog:
-------------------

* [HTTPASYNC-56] Fixed thread deadlock in DefaultClientExchangeHandlerImpl.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPASYNC-57] HTTPS request execution via a HTTP proxy can cause an infinite loop.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPASYNC-52] Proxy configuration set at the request level does not apply.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPASYNC-51] Request producers do not get correctly reset if the server responds early 
  (out of sequence), which can cause entity enclosing requests to be malformed in case of 
  re-execution.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPASYNC-45] CachingHttpAsyncClient to override Future returned by the backend.
  Contributed by James Leigh <james at 3roundstones dot com>


Release 4.0 Beta 4
-------------------

The 4.0 BETA4 release delivers significant performance improvements in request execution,
especially for short HTTP messages, and also re-aligns programming interfaces used by the library 
with HttpCore 4.3 and HttpClient 4.3 APIs. Configuration and preference APIs of HttpAsyncClient
are now consistent with those used by HttpClient 4.3.

Users of previous releases of HttpAsyncClient are advised to upgrade.

Changelog:

* [HTTPCLIENT-1353] 303 Redirects Should be Cacheable
  Contributed by James Leigh <james at 3roundstones dot com>

* Redesign of configuration and preference APIs. 
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Redesign of connection management APIs.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPASYNC-34] HttpAsyncClient fails to re-start request execution if the opposite end 
  prematurely terminates persistent connection. 
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPASYNC-28] PoolEntry's expiry information is never updated.
  Contributed by Daniel Kulp <dkulp at apache.org>



Release 4.0 Beta 3
-------------------

The 4.0 BETA3 is a maintenance release that picks up the latest bug fixes in the core components.

Changelog:

* Upgraded HttpCore to version 4.2.2

* [HTTPASYNC-26] OSGi bundle import fix.
  Contributed by Daniel Kulp <dkulp at apache.org>

* [HTTPASYNC-25] AsyncSchemeRegistry instance set in the execution context takes precedence over
  the default one.
  Contributed by Daniel Kulp <dkulp at apache.org> 

* Ported fix for HTTPCLIENT-1224
  Contributed by Oleg Kalnichevski <olegk at apache.org>


Release 4.0 Beta 2
-------------------

The 4.0 BETA2 release fixes a number of non-critical issues found since release 4.0-beta1 and 
introduces basic support for HTTP/1.1 response caching. Please note that caching for streaming 
HTTP exchanges is currently not supported.

Users of previous releases of HttpAsyncClient are advised to upgrade.

Changelog:

* [HTTPASYNC-20] HTTP exchange can now be aborted with HttpUriRequest#abort().
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPASYNC-17] Caching HttpAsyncClient facade.
  Contributed by Clinton Nielsen <clinton.h.nielsen at gmail.com>

* [HTTPASYNC-19] Fixed incorrect execution of message exchanges that span across multiple hosts 
  (for instance, in case of a request redirect).  
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPASYNC-18] Fixed thread deadlock that could occur in the DefaultAsyncRequestDirector 
  in case of a runtime exception.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPASYNC-15]: HttpAsyncClient hangs if connection leased from the pool gets immediately closed 
  by the opposite endpoint.
  Contributed by Oleg Kalnichevski <olegk at apache.org>


Release 4.0 Beta 1
-------------------

The 4.0 BETA1 release completes the application programming interface and the feature set 
of HttpAsyncClient and upgrades to the latest versions of core and client components 
(HttpCore 4.2-beta1 and HttpClient 4.2-beta1). As of this release HttpAsyncClient is expected
to be API stable.

Users of previous releases of HttpAsyncClient are advised to upgrade.

Changelog:

* [HTTPASYNC-11]: HttpAsyncClient fails to re-authenticate if connection is non-persistent.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPASYNC-5]: Allow customized LineParser for asynchronous connections.
  Contributed by Oleg Kalnichevski <olegk at apache.org>



Release 4.0 Alpha 3
-------------------

The 4.0 ALPHA3 release largely completes the application programming interface and feature set 
of HttpAsyncClient. While the API may still change in the course of the ALPHA development phase, 
this is expected to be the last round of major API changes and the API is expected to be reasonably
stable as of this release.

We are kindly asking actual and prospective users of HttpAsyncClient to review its API, evaluate
its functionality and give us feedback while the 4.0 API is still not final. If no major flaws 
are discovered the 4.0 API is expected to be frozen with the next BETA release. 

Changelog:

* [HTTPASYNC-6]: Fixed NPE in the DefaultAsyncRequestDirector#responseCompleted method.
  Contributed by Oleg Kalnichevski <olegk at apache.org>


Release 4.0 Alpha 2
-------------------

The second ALPHA release of HttpAsyncClient 4.0 comes with a number of important improvements and
enhancements. As of this version HttpAsyncClient fully supports HTTP state management (cookies) 
and HTTP authentication (basic, digest, NTLM, spnego/kerberos). Connection management classes have 
been thoroughly reworked and improved. This version also improves support for zero copy file 
upload / download operations.

The HttpAsyncClient 4.0 API is still considered experimental and is expected to change 
in the course of the ALPHA development phase.

Please note that currently HttpAsyncClient DOES NOT support

* Stateful HTTP connections


Changelog:

* [HTTPASYNC-3]: Fixed incorrect handling of expired I/O sessions by SessionPool.
  Contributed by Oleg Kalnichevski <olegk at apache.org>


Release 4.0 Alpha 1
-------------------

HttpAsyncClient is a library for asynchronous client-side HTTP communication built on HttpCore NIO
and HttpClient components.

HttpAsyncClient is NOT meant to replace or supersede Apache HttpClient. It is a complementary
library to Apache HttpClient intended for special cases where ability to handle a great number of
concurrent connections is more important than performance in terms of a raw data throughput or
for those users who prefer event-driven APIs.

The HttpAsyncClient 4.0 API is still very experimental and is expected to change in the course
of the ALPHA development phase.

Please note that currently HttpAsyncClient DOES NOT support

* HTTP state management (cookies)
* HTTP authentication
* Stateful HTTP connections
