Release 4.1.2
-------------------

This is a maintenance release that fixes a number of issues discovered since 4.1.1 and upgrades
HttpCore and HttpClient dependencies.

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

* HttpCore upgraded to version 4.4.5

* HttpClient upgraded to version 4.5.2

* [HTTPASYNC-105] socketTimeout is not reset back to default after a request that has specific 
  timeout
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPASYNC-101 CachingHttpAsyncClient to create default HttpContext if none specified
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPASYNC-97] Upgraded HttpClient OSGi dependency to 4.5
  Contributed by Oleg Kalnichevski <olegk at apache.org>



Release 4.1.1
-------------------

This is a maintenance release that fixes a number of issues discovered since 4.1 and upgrades
HttpCore and HttpClient dependencies.

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

* HttpCore upgraded to version 4.4.4

* HttpClient upgraded to version 4.5.1

* [HTTPASYNC-92] Fixed osgi bundle imports (added missing 'org.apache.http.ssl')
  Contributed by Daniel Kulp <dkulp at apache.org>

* HttpAsyncClientBuilder ignores UseSystemProperties setting when initializing SSL context
  Contributed by Oleg Kalnichevski <olegk at apache.org>




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
