~~ ====================================================================
~~ Licensed to the Apache Software Foundation (ASF) under one
~~ or more contributor license agreements.  See the NOTICE file
~~ distributed with this work for additional information
~~ regarding copyright ownership.  The ASF licenses this file
~~ to you under the Apache License, Version 2.0 (the
~~ "License"); you may not use this file except in compliance
~~ with the License.  You may obtain a copy of the License at
~~ 
~~   http://www.apache.org/licenses/LICENSE-2.0
~~ 
~~ Unless required by applicable law or agreed to in writing,
~~ software distributed under the License is distributed on an
~~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
~~ KIND, either express or implied.  See the License for the
~~ specific language governing permissions and limitations
~~ under the License.
~~ ====================================================================
~~ 
~~ This software consists of voluntary contributions made by many
~~ individuals on behalf of the Apache Software Foundation.  For more
~~ information on the Apache Software Foundation, please see
~~ <http://www.apache.org/>.

    ----------
    HttpComponents News
    ----------
    ----------
    ----------

HttpComponents Project News

* 22 July 2019 - HttpComponents HttpClient 5.0-beta5 released

    This BETA release picks up the latest fixes and performance improvements from
    HttpCore and addresses a number of issues found since the previous BETA release.

    Notable changes and features included in the 5.0 series are:

    * Support for the HTTP/2 protocol and conformance to requirements and
      recommendations of the latest HTTP/2 protocol specification documents
      (RFC 7540, RFC 7541.)

      Supported features:

        * HPACK header compression

        * Stream multiplexing (client and server)

        * Flow control

        * Response push

        * Message trailers

        * Expect-continue handshake

        * Connection validation (ping)

        * Application-layer protocol negotiation (ALPN) on Java 9.0.1+

        * TLS 1.2 security features

    * Improved conformance to requirements and recommendations of the latest HTTP/1.1 protocol
      specification documents (RFC 7230, RFC 7231.)

    * New connection pool implementation with lax connection limit guarantees and better
      performance under higher concurrency due to absence of a global pool lock.

    * Package name space changed to 'org.apache.hc.client5'.

    * Maven group id changed to 'org.apache.httpcomponents.client5'.


* 15 July 2019 - HttpComponents HttpCore 5.0-beta8 released

    This BETA fixes a number of defects found since the last release and adds several
    convenience factory and builder classes, mainly for TLS configuration and HTTP
    message construction.

    Notable new features in this release:

    * As of this version all server and requester implementations exclude weak TLS protocol
    versions and ciphers.

    []

    Notable changes and features included in the 5.0 series are:

    * Support for HTTP/2 protocol and conformance to requirements and recommendations
      of the latest HTTP/2 protocol specification (RFC 7540, RFC 7541)

    Supported features:

        * HPACK header compression

        * stream multiplexing (client and server)

        * flow control

        * response push (client and server)

        * message trailers

        * expect-continue handshake

        * connection validation (ping)

        * application-layer protocol negotiation (ALPN) on Java 9+ or through Conscrypt TLS library
          on Java 1.7 and Java 1.8.

        * TLS 1.2 security features

    Features out of scope for 5.0 release:

        * padding of outgoing frames

        * stream priority

        * plain connection HTTP/1.1 upgrade

        * CONNECT method

    * Improved conformance to requirements and recommendations of the latest HTTP/1.1 protocol
      specification (RFC 7230, RFC 7231)

    * New asynchronous HTTP transport APIs consistent for both HTTP/1.1 and HTTP/2 transport.

    * Redesigned I/O reactor APIs and improved NIO based reactor implementation for a greater
      performance and scalability.

    * Support for server side request filters for classic and asynchronous server implementations.
      Request filters could be used to implement cross-cutting protocol aspects such
      as the 'expect-continue' handshaking and user authentication / authorization.

    * Redesigned connection pool implementation with strict connection limit guarantees.
      The connection pool is expected to have a better performance under higher concurrency
      due to reduced global pool lock contention.

    * New connection pool implementation with lax connection limit guarantees and better
      performance under higher concurrency due to absence of a global pool lock.

    * Package name space changed to 'org.apache.hc.core5'

    * Maven group id changed to 'org.apache.httpcomponents.core5'


* 12 June 2019 - HttpComponents HttpClient 4.5.9 (GA) released

    This is a maintenance release that fixes a number defects discovered since 4.5.8.

* 8 April 2019 - HttpComponents HttpClient 5.0-beta4 released

    This BETA release picks up the latest fixes and performance improvements from HttpCore
    and addresses a number of issues found since the previous BETA release.

    Notable features in this release:

    * Security improvements.

    * URI handling improvements.

* 31 March 2019 - HttpComponents HttpClient 4.5.8 (GA) released

    This is a maintenance release that makes request URI normalization configurable on
    per request basis and also ports several improvements in URI handling from HttpCore
    master.

* 4 March 2019 - HttpComponents HttpCore 5.0-beta7 released

    This BETA release adds support for SOCKS version 5, improves support for TLS
    handshake timeout configuration, improves URI builder, and fixes various defects.

    Notable new features in this release:

    * SOCKS version 5 support

    * Improved TLS handshake timeout configuration

*  24 January 2019 - HttpComponents HttpClient 4.5.7 (GA) released

    This is a maintenance release that corrects Automatic-Module-Name definitions added in
    the previous release and fixes a number of minor defects discovered since 4.5.6.

*  21 January 2019 - HttpComponents HttpCore 4.4.11 (GA) released

    This is a maintenance release that corrects a number of defects in non-blocking SSL
    session code that caused compatibility issues with TLSv1.3 protocol implementation
    shipped with Java 11.

* 17 December 2018 - HttpComponents HttpClient 5.0-beta3 released

    This BETA release adds support for advanced TLS functions (such as ALPN protocol negotiation)
    on Java 1.7 and Java 1.8 through Conscrypt TLS library and picks up the latest fixes
    and performance improvements from HttpCore.

    Notable new features in this release:

    * TLS ALPN protocol negotiation support on older JREs through Conscrypt TLS library.


* 6 December 2018 - HttpComponents HttpCore 5.0-beta6 released

    This BETA release adds support for advanced TLS functions (such as ALPN protocol negotiation)
    on Java 1.7 and Java 1.8 through Conscrypt TLS library, and fixes a number of defects found
    since the previous release.

    Notable new features in this release:

    * TLS ALPN protocol negotiation on Java 1.7 and Java 1.8 through Conscrypt TLS library


* 29 October 2018 - HttpComponents HttpClient 5.0-beta2 released

    This BETA release resolves compatibility issues with Java 11 new TLS engine as well as
    a number of defects found since the previous release.

    Notable new features in this release:

    * JDK 11 compatibility

    * Support for request specific push consumers

    * Support for Reactive Streams API [http://www.reactive-streams.org/]


* 22 October 2018 - HttpComponents HttpCore 5.0-beta5 released

    This BETA release adds support for Reactive Streams API [http://www.reactive-streams.org/]
    and fixes compatibility issues with Java 11 new TLS engine as well as a number of defects
    found since the previous release.

    This release also includes a redesigned HTTP stress test tool loosely based on
    Apache Benchmark (AB) command interface with support for HTTP/2.


* 29 August 2018 - HttpComponents HttpCore 5.0-beta3 released

    This BETA release fixes a number of defects found since the previous release, adds several
    incremental improvements and improves javadoc documentation.

*  23 July 2018 - HttpComponents HttpAsyncClient 4.1.4 (GA) released

    This is a maintenance release that adds Automatic-Module-Name to the manifest 
    for compatibility with Java 9 Platform Module System and fixes a number of issues 
    discovered since 4.1.3.

*  9 July 2018 - HttpComponents HttpClient 4.5.6 (GA) released

    This is a maintenance release that adds Automatic-Module-Name to the manifest 
    for compatibility with Java 9 Platform Module System and fixes a number of issues 
    discovered since 4.5.5.

*  3 July 2018 - HttpComponents HttpCore 4.4.10 (GA) released

    This is a maintenance release that adds Automatic-Module-Name to the manifest 
    for compatibility with Java 9 Platform Module System and fixes a number of issues 
    discovered since 4.4.9.

* 22 January 2018 - HttpComponents HttpClient 4.5.5 GA released

    This is a maintenance release that fixes a regression introduced
    by the previous release causing a NPE in SystemDefaultCredentialsProvider.

* 18 January 2018 - HttpComponents HttpClient 5.0-beta1 released

    This is the first BETA release of HttpClient 5.0. The 5.0 release serices introduces
    support for the HTTP/2 protocol and event driven messaging APIs consistent for all
    supported HTTP protocol versions.

    HttpClient ships with two client implementations:

    * HttpClient Classic is based on the classic (blocking) I/O model; largely compatible
      with the 4.x APIs; supports HTTP/1.1 only.

    * HttpClient Async is based on NIO model; new event driven APIs consistent for all supported
      HTTP protocol versions; supports both HTTP/1.1 and HTTP/2.

    []

    Notable new features in this release:

    * New asynchronous HTTP cache backend APIs

    * Fully asynchronous HTTP cache backend based on Memcached

    * Support for bulk cache retrieval

* 15 January 2018 - HttpComponents HttpCore 5.0-beta2 released

    This BETA release fixes a number of defects found since the previous release and
    adds several incremental improvements.

*  11 January 2018 - HttpComponents HttpCore 4.4.9 (GA) released

    This is a maintenance release that fixes a number of issues discovered since 4.4.8 and adds a few low-level methods.

*  4 December 2017 - HttpComponents HttpClient 4.5.4 (GA) released

    This is a maintenance release that fixes a number of issues discovered since release 4.5.3.

*  27 November 2017 - HttpComponents HttpClient 5.0-alpha3 released

    This is a major release that introduces support for the HTTP/2 protocol and event driven
    messaging APIs consistent for all supported HTTP protocol versions.

    Notable new features in this release:

    * Asynchronous HttpClient implementations optimized for HTTP/2 multiplexed request execution.

    * Full support for HTTP caching by asynchronous HttpClient implementations including
      streaming message exchanages.

*  6 November 2017 - HttpComponents HttpCore 5.0-beta1 released

    This is a major release that renders HttpCore API incompatible with the stable 4.x branch
    and upgrades HTTP/1.1 and HTTP/2 protocol conformance to the requirements and recommendations
    of the latest protocol specification.

    Notable new features in this release:

    * New HTTP/2 requester optimized for multiplexed execution of requests.

*  7 October 2017 - HttpComponents HttpCore 4.4.8 (GA) released

    This is a maintenance release that fixes a number of issues discovered since release 4.4.7.

*  14 September 2017 - HttpComponents HttpCore 4.4.7 (GA) released

    This is a maintenance release that fixes a number of issues discovered since release 4.4.6.

*  4 September 2017 - HttpComponents HttpCore 5.0-alpha4 released

    This is a major release that renders HttpCore API incompatible with the stable 4.x branch
    and upgrades HTTP/1.1 and HTTP/2 protocol conformance to the requirements and recommendations
    of the latest protocol specification.

*  11 May 2017 - HttpComponents HttpClient 5.0-alpha2 released

    This is a major release that introduces support for HTTP/2 protocol and event driven
    messaging APIs consistent for all supported HTTP protocol versions.

*  2 May 2017 - HttpComponents HttpCore 5.0-alpha3 released

    This is a major release that renders HttpCore API incompatible with the stable 4.x branch
    and upgrades HTTP/1.1 and HTTP/2 protocol conformance to the requirements and recommendations
    of the latest protocol specification.

*  10 February 2017 - HttpComponents HttpAsyncClient 4.1.3 (GA) released 

    This is a maintenance release that fixes a number of issues discovered since release 4.1.2.

*  27 January 2017 - HttpComponents HttpClient 4.5.3 (GA) released 

    This is a maintenance release that fixes a number of issues discovered since release 4.5.2.

*  12 January 2017 - HttpComponents HttpCore 4.4.6 (GA) released 

    This is a maintenance release that fixes a number of issues discovered since release 4.4.5.

*  27 December 2016 - HttpComponents HttpCore 5.0-alpha2 released

    This is a major release that renders HttpCore API incompatible with the stable 4.x branch
    and upgrades HTTP/1.1 and HTTP/2 protocol conformance to the requirements and recommendations
    of the latest protocol specification.

*  27 June 2016 - HttpComponents HttpAsyncClient 4.1.2 (GA) released 

    This is a maintenance release that fixes a number of issues discovered since release 4.1.1.

*  14 June 2016 - HttpComponents HttpCore 4.4.5 (GA) released 

    This is a maintenance release that fixes a number of issues discovered since release 4.4.4.

*  1 March 2016  - HttpComponents HttpClient 4.5.2 (GA) released

    This is a maintenance release that fixes a number of minor bugs reported since 4.5.1.

*  28 January 2016 - HttpComponents HttpClient 5.0-alpha1 released

    This is a major release that renders HttpClient API incompatible with the stable 4.x branch
    and upgrades HTTP/1.1 protocol conformance to the requirements and recommendations of 
    the latest protocol specification. This release lays the foundation for transition to HTTP/2 
    as the primary transport protocol in the future releases.

*  3 January 2016 - HttpComponents HttpCore 5.0-alpha1 released

    This is a major release that renders HttpCore API incompatible with the stable 4.x branch
    and upgrades HTTP/1.1 protocol conformance to the requirements and recommendations of the 
    latest protocol specification. This release lays the foundation for transition to HTTP/2 as 
    the primary transport protocol in the future releases.

*  9 November 2015 - HttpComponents HttpAsyncClient 4.1.1 (GA) released

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

*  4 November 2015 - HttpComponents HttpCore 4.4.4 (GA) released

    This is a maintenance release that fixes a number of issues discovered since release 4.4.3.

*  16 September 2015  - HttpComponents HttpClient 4.5.1 (GA) released

    This is a maintenance release that fixes a number of minor bugs reported since 4.5.

*  11 September 2015  - HttpComponents HttpCore 4.4.3 (GA) released

    This maintenance release fixes a bug in non-blocking HTTP request pipelining code discovered 
    since 4.3.1.

*  5 June 2015 - HttpClient 4.5 (GA) released 

    HttpClient 4.5 (GA) is a minor feature release that includes several incremental enhancements 
    to the exisitng functionality such as support for private domains in the Mozilla Public Suffix 
    List.

*  23 April 2015 - HttpAsyncClient 4.1 (GA) released 

    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

*  31 March 2015 - HttpComponents HttpClient 4.4.1 (GA) released

    This is a maintenance release that fixes a number of bugs reported since 4.4.

*  20 March 2015 - HttpComponents HttpCore 4.4.1 (GA) released

    This is a maintenance release that fixes a number of minor bugs found since 4.4.

*  5 February 2015 - HttpComponents HttpClient 4.4 released

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

    * 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>

    * More efficient stale connection checking: indiscriminate connection checking which results
    in approximately 20 to 50 ms overhead per request has been deprecated in favor of conditional
    connection state validation (persistent connections are to be re-validated only if a specified
    period inactivity has elapsed)

    * 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

    * Native Windows Negotiate and NTLM via SSPI through JNA: when running on Windows OS HttpClient
    configured to use native NTLM or SPNEGO authentication schemes can make use of platform specific
    functionality via JNA and current user credentials. This functionality is still considered
    experimental, known to have compatibility issues and subject to change without prior notice.

*  17 December 2014 - HttpComponents HttpCore 4.4 released

    This is the first stable (GA) release of HttpCore 4.4. The most notable features included in 
    4.4 series are:

    * Support for pipelined request processing on the server side

    * Support for pipelined request execution on the client side

    * Simplified bootstrapping of blocking and non-blocking (NIO) HTTP server implementations   

    * Inclusion of SSL context initialization utilities from HttpClient

*  6 November 2014 - HttpComponents HttpClient 4.3.6 (GA) released

    This is a maintenance release that fixes several problems with HttpClient OSGi bundle as well 
    as some other issues reported since release 4.3.5.

    Please note that as of this release HttpClient disables all versions of SSL (including SSLv3)
    in favor of the TLS protocol by default. Those users who wish to continue using SSLv3 need 
    to explicitly enable support for it. 

*  22 October 2014 - HttpComponents HttpCore 4.3.3 (GA) released

    This maintenance release fixes a number of bugs found since 4.3.2, mostly in the NIO transport 
    components. All users of HttpCore 4.3 are advised to upgrade.

*  17 October 2014 - HttpComponents HttpAsyncClient 4.4-beta1 released

    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

*  28 September 2014 - HttpComponents HttpClient 4.4-beta1 released

    This is the first BETA release of HttpClient 4.4. Notable features and enhancements included
    in 4.4 series are: 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; native windows Negotiate/NTLM via JNA; more efficient stale 
    connection checking; authentication cache thread-safety

*  22 September 2014 - HttpComponents HttpCore 4.4-beta1 released

    This is the first BETA release from the 4.4.x development branch. The most notable features 
    included in 4.4 series are: support for pipelined request processing on the server side;
    support for pipelined request execution on the client side; simplified bootstrapping of 
    blocking and non-blocking (NIO) HTTP server implementations.   

*  10 Aug 2014 - HttpComponents HttpAsyncClient 4.0.2 (GA) released

    HttpAsyncClient 4.0.2 (GA) is a bug fix release that addresses several issues reported since 
    release 4.0.1.

*  10 Aug 2014 - HttpComponents HttpClient 4.3.5 (GA) released

    HttpClient 4.3.5 (GA) is a bug fix release that addresses several issues reported since 
    release 4.3.4.

*  30 June 2014 - HttpComponents HttpClient 4.4-alpha1 released

    This is the first ALPHA release from the 4.4.x development branch. Notable features and 
    enhancements included this release are: more efficient stale connection checking, native 
    Windows Negotiate/NTLM via JNA, authentication cache thread-safety

*  18 June 2014 - HttpComponents HttpCore 4.4-alpha1 released

    This is the first release from the 4.4.x development branch. The most notable features included 
    in this release are: support for pipelined request processing on the server side, support 
    for pipelined request execution on the client sides, simplified bootstrapping of blocking and 
    non-blocking (NIO) HTTP server implementations   

*  6 June 2014 - HttpComponents HttpClient 4.3.4 (GA) released

    HttpClient 4.3.4 (GA) is a maintenance release that improves performance in high concurrency 
    scenarios. This version replaces dynamic proxies with custom proxy classes and eliminates 
    thread contention in java.reflect.Proxy.newInstance() when leasing connections from 
    the connection pool and processing response messages

*  26 February 2014 - HttpComponents HttpClient 4.3.3 (GA) released

    HttpClient 4.3.3 (GA) is a bug fix release that fixes a regression introduced by the previous
    release causing a significant performance degradation in compressed content processing.

    Users of HttpClient 4.3 are encouraged to upgrade.
    
*  24 February 2014 - HttpComponents HttpAsyncClient 4.0.1 (GA) released

    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. 

    Users of HttpAsyncClient 4.0 are advised to upgrade.

*  17 February 2014 - HttpComponents HttpCore 4.3.2 (GA) released

    This maintenance release fixes a number of bugs and regressions found since 4.3.1, mostly 
    in the NIO transport components. All users of HttpCore 4.3 are advised to upgrade.

*  19 January 2014 - HttpComponents HttpClient 4.3.2 (GA) released

    HttpClient 4.3.2 (GA) is a maintenance release that delivers a number of improvements 
    as well as bug fixes for issues reported since 4.3.1 release. SNI support for 
    Oracle JRE 1.7+ is being among the most notable improvements. 
    
    Users of HttpClient 4.3 are encouraged to upgrade.

*  27 December 2013 - HttpComponents HttpCore 4.3.1 (GA) released

    This maintenance release fixes a number of bugs and regressions found since 4.3, mostly in the 
    NIO transport components. All users of HttpCore 4.3 are advised to upgrade.

*  31 October 2013 - HttpComponents HttpAsyncClient 4.0 (GA) released

    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.

*  7 October 2013 - HttpComponents HttpClient 4.3.1 (GA) released

    This is a maintenance release that addresses a number of issues reported since release 4.3,
    including one major security issue. Users of HttpClient 4.3 are strongly advised to upgrade.

*  12 September 2013 - HttpComponents HttpClient 4.3 (GA) released

    This is the first stable (GA) release of HttpClient 4.3. The 4.3 branch enhances HttpClient 
    in several key areas and includes several notable features and improvements: 

    * Support for Java 7 try-with-resources for resource management (connection release.)

    * Added fluent Builder classes for HttpEntity, HttpRequest, HttpClient and SSLContext instances. 

    * Deprecation of preference and configuration API based on HttpParams interface in favor of
    constructor injection and plain configuration objects.

    * Reliance on object immutability instead of access synchronization for thread safety. 
    Several old classes whose instances can be shared by multiple request exchanges have
    been replaced by immutable equivalents. 

    * DefaultHttpClient,  DecompressingHttpClient, CachingHttpClient and similar classes are 
    deprecated in favor of builder classes that produce immutable HttpClient instances. 

    * HttpClient builders now dynamically construct a request execution pipeline tailored 
    specifically to the user configuration by physically excluding unnecessary protocol components.

    * There is now an option to construct a minimal HttpClient implementation that can only execute 
    basic HTTP message exchanges without redirects, authentication, state management or proxy 
    support. This feature might be of particular use in web crawler development. 

    * There is now option to avoid strict URI syntax for request URIs by executing HTTP requests 
    with an explicitly specified target host. HttpClient will no longer attempt to parse the request 
    URI if it does not need to extract the target host from it.

    This release also includes all fixes from the stable 4.2.x release branch.

*  12 September 2013 - HttpComponents HttpClient 4.2.6 (GA) released

    This is a maintenance release that addresses a number of non-critical issues reported 
    since release 4.2.5.

*  5 August 2013 - HttpComponents HttpCore 4.3 released

   This is the first stable (GA) release of HttpCore 4.3. The most notable features in the 4.3
   branch are:

   * Deprecation of preference and configuration API based on HttpParams interface in favor of
     constructor injection and plain configuration objects.

   * Reliance on object immutability instead of access synchronization for thread safety.
     Several old classes whose instances can be shared by multiple request exchanges have
     been replaced by immutable equivalents.
 
   []

   The 4.3 branch also contains performance optimizations such as reduced TCP packet 
   fragmentation and more efficient lease / release operations for pools of persistent 
   connections on the client side.

   This release also includes all fixes from the 4.2.x release branch.

*  5 August 2013 - HttpComponents HttpCore 4.2.5 released

    This is a maintenance release that fixes a number of bugs found in NIO components since 4.2.4.
    Users of earlier versions of HttpCore 4.2 are advised to upgrade.

    This is likely to be the last release in the 4.2.x branch.
  
*  12 June 2013 - HttpComponents HttpClient 4.3-beta2 released

    This is the second BETA release of HttpClient 4.3. The 4.3 branch enhances HttpClient in 
    several key areas and includes several notable features and improvements: Support for Java 7 
    try-with-resources for resource management (connection release); fluent Builder classes for 
    HttpEntity, HttpRequest and HttpClient instances, deprecation of preference and configuration
    API based on HttpParams interface in favor of constructor injection and plain configuration 
    objects, reliance on object immutability instead of access synchronization for thread safety.

    This release also includes all fixes from the stable 4.2.x release branch.

* 16 May - HttpComponents HttpAsyncClient 4.0-beta4 released

    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.

* 8 May - HttpComponents HttpCore 4.3-beta2 released

    This is the second BETA release from the 4.3.x release branch. This release addresses 
    performance issues in the non-blocking connection pool implementation and also includes 
    a number of performance improvements in the low level NIO based transport components.

*  24 April 2013 - HttpComponents HttpClient 4.2.5 (GA) released

    This is a maintenance release that addresses a number of issues reported since release 4.2.4 
    including a major bug that can lead to re-use of persistent connections in a inconsistent state.

*  11 April 2013 - HttpComponents HttpClient 4.3-beta1 released

    This is the first BETA release of HttpClient 4.3. The 4.3 branch enhances HttpClient in 
    several key areas and includes several notable features and improvements: Support for Java 7 
    try-with-resources for resource management (connection release); fluent Builder classes for 
    HttpEntity, HttpRequest and HttpClient instances, deprecation of preference and configuration
    API based on HttpParams interface in favor of constructor injection and plain configuration 
    objects, reliance on object immutability instead of access synchronization for thread safety.

    This release also includes all fixes from the stable 4.2.x release branch.

*  11 April 2013 - HttpComponents HttpClient 4.2.4 (GA) released

    This is a bug fix release that addresses a number of issues reported since release 4.2.3. 

*  25 March 2013 - HttpComponents HttpCore 4.3-beta1 released

    This is the first BETA release from the 4.3 release branch. The main theme of the 4.3 release
    series is streamlining of component configuration and deprecation of the old configuration
    API based on HttpParams in favor of constructor-based dependency injection and plain objects 
    for configuration parameters.

    This release also includes performance optimizations intended to reduce TCP packet 
    fragmentation when writing out HTTP messages both in blocking and non-blocking I/O modes, 
    which should result  in up to 20% higher throughput for short entity enclosing messages.

*  25 March 2013 - HttpComponents HttpCore 4.2.4 released

    This is a maintenance release that fixes a number of bugs found in NIO components since 4.2.3. 
    We advise users of HttpCore NIO of all versions to upgrade.

*  21 January 2013 - HttpComponents HttpClient 4.3-alpha1 released

    This is the first ALPHA release of HttpClient 4.3. The 4.3 branch enhances HttpClient in 
    several key areas and includes several notable features and improvements: Support for Java 7 
    try-with-resources for resource management (connection release); fluent Builder classes for 
    HttpEntity, HttpRequest and HttpClient instances, deprecation of preference and configuration
    API based on HttpParams interface in favor of constructor injection and plain configuration 
    objects, reliance on object immutability instead of access synchronization for thread safety.

*  15 January 2013 - HttpComponents HttpClient 4.2.3 (GA) released

    This is a bug fix release that addresses a number of issues reported since release 4.2.2. 
    This release also includes a thoroughly reworked NTLM authentication engine which should 
    result in a better compatibility with the newest Microsoft products. 

*  08 Dec 2012 - Welcome new HttpComponents committer Karl Wright 

    Karl Wright has been unanimously voted in as a new HttpComponents committer due to his
    invaluable help in supporting the internal NTLM engine and NTLM related authentication code.  
    Karl is a committer on a number of ASF projects: Lucene, Lucene connectors, Incubator.

    Welcome on board, Karl!

* 30 November 2012 - HttpComponents HttpCore 4.3-alpha1 released

    This is the first release from the 4.3.x release branch. The main theme of the 4.3 release
    series is streamlining of component configuration and deprecation of the old configuration
    API based on HttpParams in favor of constructor-based dependency injection and plain objects 
    for configuration parameters.

* 30 November 2012 - HttpComponents HttpCore 4.2.3 (GA) released

    HttpCore 4.2.3 is a maintenance release that fixes a number of bugs found since 4.2.2 
    including a major bug in the NIO module that can cause an infinite loop in SSL sessions 
    under special circumstances when the remote peer terminates the session in the middle of 
    SSL handshake. We advise users of HttpCore NIO of all versions to upgrade.

* 25 October 2012 - HttpComponents HttpClient 4.2.2 (GA) released

    HttpClient 4.2.2 is a bug fix release that addresses a number of issues reported since 
    release 4.2.1. Users of HttpClient 4.2 are advised to upgrade.

* 29 September 2012 - HttpComponents HttpAsyncClient 4.0-beta3 released

    This is a maintenance release that picks up the latest bug fixes in the core components.

* 23 September 2012 - HttpComponents HttpCore 4.2.2 (GA) released

    This is a maintenance release that fixes a number of bugs and regressions found since 4.2.1
    including a major bug in the NIO module causing incorrect handling of outgoing Content-Length
    delimited messages larger than 2GB. Users of HttpCore 4.2 are advised to upgrade.

* 29 August 2012 - Welcome new HttpComponents committer William Speirs 

    William Speirs, a long time contributor to the project, has been unanimously voted in as 
    a new HttpComponents committer. William is already a committer on Apache Commons project.

    Welcome on board, William!

* 8 August 2011 - HttpComponents HttpAsyncClient 4.0-beta2 released

    This 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.

* 4 August 2012 - Welcome new HttpComponents committer Gary Gregory 

    By 5 binding votes in favor Gary Gregory has been unanimously voted in as a new 
    HttpComponents committer. Gary is already a committer on Apache Commons, Logging and Xalan
    projects.

    Welcome on board, Gary!

* 5 July 2012 - HttpComponents HttpClient 4.2.1 (GA) released

    HttpClient 4.2.1 is a bug fix release that addresses a number of issues reported since 
    release 4.2. Users of HttpClient 4.2 are advised to upgrade.

* 14 June 2012 - HttpComponents HttpCore 4.2.1 (GA) released

    HttpCore 4.2.1 is a patch release that fixes a number of non-critical bugs found since 4.2.
    Users of HttpCore 4.2 are advised to upgrade.

* 22 May 2012 - HttpComponents HttpClient 4.2 (GA) released

    This is the first stable (GA) release of HttpClient 4.2. The most notable enhancements included 
    in this release are:

    * New facade API for HttpClient based on the concept of a fluent interface. The fluent API 
    exposes only the most fundamental functions of HttpClient and is intended for relatively simple 
    use cases that do not require the full flexibility of HttpClient. However, the fluent API 
    almost fully relieves the users from having to deal with connection management and resource 
    deallocation.

    * Redesigned and rewritten connection management code. 

    * Enhanced HTTP authentication API that enables HttpClient to handle more complex 
    authentication scenarios. HttpClient 4.2 is now capable of making use of multiple 
    authentication challenges and retry authentication with a fall-back scheme in case the primary 
    one fails. This can be important for compatibility with Microsoft products that are often 
    configured to use SPNEGO/Kerberos as the preferred authentication scheme. 

* 5 May 2012 - HttpComponents HttpCore 4.2 (GA) released

    This is the first stable (GA) release of HttpCore 4.2. The most notable features included in 
    this release are connection pool components for blocking and non-blocking HTTP connections and 
    new asynchronous client and server side protocol handlers.

    New protocol handling API used in conjunction with connection pooling components is expected to 
    make development of asynchronous HTTP client agents and HTTP proxies easier and less error 
    prone.

    Connection pool components are based on mature code migrated from HttpClient and HttpAsyncClient 
    modules but have a slightly different API that makes a better use of Java standard concurrent 
    primitives. 

* 22 February 2012 - HttpComponents HttpAsyncClient 4.0-beta1 released

    This the first BETA release of HttpAsyncClient. This 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.

* 10 February 2012 - HttpComponents HttpClient 4.2-beta1 released

    This is the first BETA release of HttpClient 4.2. This release completes development of several
    notable enhancements in HttpClient: new facade API, redesigned connection management code 
    and new HTTP authentication API.

* 7 February 2012 - HttpComponents HttpClient 4.1.3 (GA) released

    HttpClient 4.1.3 is a bug fix release that addresses a number of non-critical issues found 
    since 4.1.2 primarily in the HTTP caching module.

* 1 February 2012 - HttpComponents HttpCore 4.2-beta1 released

    This is the first BETA release of HttpCore 4.2. This release ships with an improved 
    asynchronous protocol handling API and new non-blocking client and server HTTP protocol handler 
    implementations. New API is expected to be more flexible especially for writing HTTP proxy or 
    gateway type of services. Upstream projects are encouraged to evaluate the new API and 
    give feedback.

* 23 December 2011 - HttpComponents HttpCore 4.1.4 (GA) released

    HttpCore 4.1.4 is a patch release that fixes a number of bugs found since 4.1.3. It is also 
    likely to be the last release in the 4.1.x branch.

* 3 November 2011 - HttpComponents HttpClient 4.2-alpha1 released

    This is the first ALPHA release of HttpClient 4.2. The 4.2 branch enhances HttpClient in several
    key areas and includes several notable features and improvements: new facade API, redesigned 
    connection management code and new HTTP authentication API.

* 29 September 2011 - HttpComponents HttpAsyncClient 4.0-alpha3 released

    This is the third ALPHA release of HttpAsyncClient 4.0. This 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.

* 23 September 2011 - HttpComponents HttpCore 4.2-alpha2 released

    This is the second ALPHA release of HttpCore 4.2. This release comes with completely redesigned 
    and rewritten asynchronous protocol handlers. New protocol handling API used in conjunction 
    with connection pooling components introduced in the previous ALPHA release is expected to make 
    development of asynchronous HTTP client agents and HTTP proxies easier and less error prone.

* 19 August 2011 - HttpComponents HttpCore 4.2-alpha1 released

    This is the first ALPHA release of the 4.2 development branch. The most notable feature 
    included in this release is support for connection pools of blocking and non-blocking HTTP 
    connections. Connection pool components are based on mature code migrated from HttpClient and 
    HttpAsyncClient modules but have a slightly different API that makes a better use of Java 
    standard concurrent primitives. Support for connection pools in HttpCore is expected to make 
    development of client and proxy HTTP services easier and less error prone.

* 7 August 2011 - HttpComponents HttpClient 4.1.2 (GA) released

    HttpClient 4.1.2 is a bug fix release that addresses a number of non-critical issues reported 
    since release 4.1.1.

* 31 July 2011 - HttpComponents HttpCore 4.1.3 (GA) released

    HttpCore 4.1.3 is a patch release that fixes a critical regression in the non-blocking SSL I/O
    session code introduced in the 4.1.2 release.

* 18 July 2011 - HttpComponents HttpCore 4.1.2 (GA) released

    HttpCore 4.1.2 is a patch release that fixes a number of non-critical issues found since 
    release 4.1.1.

* 24 May 2011 - HttpComponents HttpAsyncClient 4.0-alpha2 released

    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.

* 20 May 2011 - HttpComponents HttpCore 4.1.1 (GA) released

    HttpCore 4.1.1 is a patch release that fixes a number of non-critical issues found since 
    release 4.1.

    This release marks the end of support for Java 1.3. As of release 4.2 HttpCore will require 
    Java 1.5 for all its components.

* 20 March 2011 - HttpComponents HttpClient 4.1.1 (GA) released

    HttpClient 4.1.1 is a bug fix release that addresses a number of issues reported since 
    release 4.1, including one critical security issue.

* 23 January 2011 - HttpComponents HttpClient 4.1 (GA) released

    The HttpClient 4.1 release builds upon the stable foundation laid by HttpClient 4.0 and adds 
    several functional improvements and popular features.

    * Response caching conditionally compliant with HTTP/1.1 specification (full compliance with
      MUST requirements, partial compliance with SHOULD requirements)

    * Full support for NTLMv1, NTLMv2, and NTLM2 Session authentication. The NTLM protocol code 
      was kindly contributed by the Lucene Connector Framework project.

    * Support for SPNEGO/Kerberos authentication.

    * Persistence of authentication data between request executions within the same execution context.

    * Support for preemptive authentication for BASIC and DIGEST schemes.
  
    * Support for transparent content encoding. Please note transparent content encoding is not 
      enabled per default in order to avoid conflicts with already existing custom content encoding 
      solutions.

    * Mechanism to bypass the standard certificate trust verification (useful when dealing with 
      self-signed certificates).

    * Simplified configuration for connection managers.

    * Transparent support for host multihoming.

* 18 January 2011 - HttpComponents HttpAsyncClient 4.0-alpha1 released

    This is the first public release of HttpAsyncClient. The HttpAsyncClient 4.0 API is considered 
    very experimental and is expected to change in the course of the ALPHA development phase. This
    release is primarily intended for early adopters who may be interested in contributing to
    the project and in helping shape the new API.

* 21 November 2010 - HttpComponents HttpClient 4.1-beta1 released

    This release finalizes the 4.1 API and brings a number of major improvements to the HTTP 
    caching module. This release also adds full support for NTLMv1, NTLMv2, and NTLM2 Session 
    authentication schemes. The NTLM protocol code was kindly contributed by the Lucene Connector 
    Framework project.

* 19 November 2010 - HttpComponents HttpCore 4.1 (GA) released

    This is the first stable release of HttpCore 4.1. This release provides a compatibility mode 
    with JREs that have a naive (broken) implementation of SelectionKey API and also improves
    compatibility with the Google Android platform. There has also been a number of performance 
    related improvements and bug fixes in both blocking and non-blocking components.

* 26 October 2010 - Welcome new HttpComponents committer Jonathan Moore 

    By 4 binding votes in favor and none against Jonathan Moore has been voted in as a new 
    HttpComponents committer. Jonathan has made major contributions to the new HttpClient caching
    module.

    Welcome on board, Jonathan!

* 19 September 2010 - HttpComponents HttpClient 4.0.3 (GA) released

    This is an emergency release fixing a critical regression in the SSL
    connection management code.

* 9 September 2010 - HttpComponents HttpClient 4.0.2 (GA) released

    This is a maintenance release that fixes a number of bugs found since 4.0.1. 
    This is likely to be the last release in the 4.0.x branch.

* 30 August 2010 - HttpComponents HttpCore 4.1-beta2 released

    This release addresses fixes a number of non-critical bugs. It is likely to be 
    the last BETA release in the 4.1 branch.

* 19 May 2010 - HttpComponents HttpClient 4.1-alpha2 released

    This release fixes a number of non-severe bugs discovered since  the last release 
    and introduces support for two frequently requested features:

    * HTTP/1.1 response caching

    * transparent support for host multihoming

    * a mechanism to bypass the standard certificate trust verification (useful when 
      dealing with self-signed certificates)

* 3 April 2010 - HttpComponents HttpCore 4.1-beta1 released

    This release finalizes the API introduced in the 4.1 development branch. It also 
    fixes a number of bugs discovered since the previous release and delivers a number 
    of performance optimizations in the blocking HTTP transport components. The blocking 
    HTTP transport is expected to be 5% to 10% faster compared to previous releases.

* 11 December 2009 - HttpComponents HttpClient 4.1-alpha1 released

    This release builds on the stable 4.0 release and adds several functionality 
    improvements and new features.

    * Simplified configuration of connection managers.

    * Persistence of authentication data between request executions within 
    the same execution context.

    * Support for SPNEGO/Kerberos authentication scheme

    * Support for transparent content encoding. Please note transparent content 
    encoding is not enabled per default in order to avoid conflicts with
    already existing custom content encoding solutions.

* 11 December 2009 - HttpComponents HttpClient 4.0.1 (GA) released

    This is a bug fix release that addresses a number of issues discovered since 
    the previous stable release. None of the fixed bugs is considered critical. 
    Most notably this release eliminates dependency on JCIP annotations.

    This release is also expected to improve performance by 5 to 10% due to
    elimination of unnecessary Log object lookups by short-lived components.
    
* 12 September 2009 - HttpComponents HttpCore 4.1-alpha1 released

    This is the first public release from the 4.1 branch of HttpCore. This release 
    adds a number of new features, most notable being introduction of compatibility 
    mode with IBM JREs and other JREs with naive (broken) implementation 
    of SelectionKey API.

* 14 August 2009 - HttpComponents HttpClient 4.0 (GA) released

    This the first stable (GA) release in the 4.x code line. This release completes 
    the rewrite of HttpClient and delivers a complete API documentation and fixes 
    a few minor bugs reported since the previous release.

* 22 June 2009 - HttpComponents HttpCore 4.0.1 (GA) released

    This is a patch release addressing a number of issues discovered since the 4.0 
    release.

* 26 February 2009 - HttpComponents HttpCore 4.0 (GA) released

    This the first stable (GA) release in the 4.x code line. This release delivers 
    complete API documentation and fixes a few minor bugs reported since 
    the previous release.

* 20 December 2008 - HttpComponents HttpClient 4.0-beta2 released

    The second BETA of HttpComponents HttpClient addresses a number of issues 
    discovered since the previous release. 

    The only significant new feature is an addition of an OSGi compliant bundle 
    combining HttpClient and HttpMime jars.

    All upstream projects are strongly encouraged to upgrade.

* 19 October 2008 - HttpComponents HttpCore 4.0-beta3 released

    The third BETA version of HttpComponents Core addresses a number of issues 
    discovered since the previous release. 

    The only significant new feature is an addition of an OSGi compliant bundle
    combining HttpCore and HttpCore NIO jars.

* 12 September 2008 - HttpClient is one of the best open source development tools

    HttpClient is among the 60 winners of InfoWorlds 
    {{{http://www.infoworld.com/article/08/08/04/32TC-bossies-2008_1.html}
    "Best of Open Source Software Awards 2008"}}.

    HttpClient was selected as one of the 
    {{{http://www.infoworld.com/slideshow/2008/08/166-best_of_open_so-4.html}
    best open source development tools}}.

* 29 August 2008 - HttpComponents HttpClient 4.0-beta1 released

    The first BETA brings yet another round of API enhancements and 
    improvements in the area of connection management. Among the most notable
    ones is the capability to handle stateful connections such as persistent 
    NTLM connections and private key authenticated SSL connections.

    This is the first API stable release of HttpClient 4.0. All further 
    releases in the 4.0 code line will maintain API compatibility with this
    release.

* 22 June 2008 - HttpComponents HttpCore 4.0-beta2 released

    The second BETA version of HttpComponents Core added a number of improvements 
    to the NIO components, most notable being improved asynchronous client side and 
    server side protocol handlers.

* 09 May 2008 - HttpComponents HttpClient 4.0-alpha4 released

    The fourth ALPHA marks the completion of the overhaul of the connection 
    management code in HttpClient. All known shortcomings of the old HttpClient 
    3.x connection management API have been addressed.

* 03 May 2008 - Welcome new HttpComponents committer Sam Berlin 

    By 6 binding votes in favor and none against Sam Berlin has been voted in as a new 
    HttpComponents committer. Sam made several valuable contributions to both core 
    and client components in the course of the past several months.

    Welcome on board, Sam!

* 26 February 2008 - HttpComponents HttpClient 4.0-alpha3 released 

    The third ALPHA release brings another round of API refinements and improvements 
    in functionality. As of this release HttpClient requires Java 5 compatible 
    runtime environment and takes full advantage of generics and new concurrency
    primitives.     

    This release also introduces new default cookie policy that selects a cookie 
    specification depending on the format of cookies sent by the target host. 
    It is no longer necessary to know beforehand what kind of HTTP cookie support 
    the target host provides. HttpClient is now able to pick up either a lenient 
    or a strict cookie policy depending on the compliance level of the target host.

    Another notable improvement is a completely reworked support for multipart 
    entities based on Apache mime4j library.

* 24 January 2008 - HttpComponents HttpCore 4.0-beta1 released 

    The first BETA version of HttpComponents Core has been released. This release 
    can be considered a major milestone, as it marks the end of API instability 
    in HttpCore. As of this release the API compatibility between minor releases
    in 4.x codeline will be maintained.

    This release includes several major improvements such as enhanced HTTP message 
    parsing API and optimized parser implementations, Java 5.0 compatibility
    for HttpCore NIO extensions.

    The focus of the development efforts will be gradually shifting towards
    providing better test coverage, documentation and performance optimizations. 

* 15 November 2007 - HttpComponents becomes TLP

    The ASF board had approved HttpComponents 'graduation' from Jakarta to a TLP of its own.

    We are now Apache HttpComponents Project!

* 7 November 2007 - HttpComponents HttpClient 4.0-alpha2 released 

    The second ALPHA release is another important milestone in the redesign of HttpClient. The 
    release includes a number of improvements since ALPHA1, among which are improved connection 
    pooling, support for proxy chains, redesigned HTTP state and authentication credentials 
    management API, improved RFC 2965 cookie specification.  

* 9 October 2007 - HttpComponents HttpCore 4.0-alpha6 released 

    The sixth ALPHA version of HttpComponents Core has been released. This release sports an 
    improved message parsing and formatting API in the base module and lots of incremental 
    improvements and bug fixes in the NIO and NIOSSL modules. Based on the improved API, it is now 
    possible to send and receive SIP messages with HttpComponents Core.

* 20 July 2007 - HttpComponents HttpClient 4.0-alpha1 released 

    This release represents a complete, ground-up redesign and almost a complete rewrite of the old 
    HttpClient 3.x codeline. This release finally addresses several design flaws that existed since 
    the 1.0 release and could not be fixed without a major code overhaul and breaking API 
    compatibility. 

    Notable changes and enhancements: 

    * Redesign of the HttpClient internals addressing all known major architectural shortcomings of 
    the 3.x codeline  

    * Cleaner, more flexible and expressive API   

    * Better performance and smaller memory footprint due to a more efficient HTTP transport based 
    on HttpCore. HttpClient 4.0 is expected to be 10% to 25% faster than HttpClient 3.x codeline

    * More modular structure   

    * Pluggable redirect and authentication handlers   

    * Support for protocol incerceptors

    * Improved connection management 

    * Improved support for sending requests via a proxy or a chain of proxies 

    * Improved handling redirects of entity enclosing requests

    * More flexible SSL context customization 

    * Reduced intermediate garbage in the process of generating HTTP requests and parsing HTTP 
    responses  

* 4 July 2007 - HttpComponents HttpCore 4.0-alpha5 released 

   The fifth ALPHA version of HttpComponents Core has been released. This release delivers a number 
   of incremental improvements across the board in all modules and adds several performance oriented 
   features such as ability to transfer data directly between a file and a socket NIO channels. 

* 30 March 2007 - HttpComponents HttpCore 4.0-alpha4 released 

    The fourth ALPHA version fixes a number of bugs and adds a number of improvements to HttpCore 
    base and the HttpCore NIO extensions. This release also introduces NIOSSL extensions that can be 
    used to extend HttpCore non-blocking transport components with the ability to transparently encrypt 
    data in transit using SSL/TLS.

* 6 December 2006 - HttpComponents HttpCore 4.0-alpha3 released 

    The third ALPHA version of HttpCore has been released. The ALPHA3 release includes a number of API
    optimizations and improvements and introduces a set of NIO extensions to the HttpCore API. 
    NIO extensions can be used to build HTTP services intended to handle thousands of simultaneous 
    connections with a small number of I/O threads.

* 9 June 2006 - HttpComponents HttpCore 4.0-alpha2 released 

    The second ALPHA version of HttpCore  has been released, which addresses a number of non-critical 
    problems found in the previous release. The upstream projects are strongly encouraged use this 
    release as a dependency while HttpCore undergoes another round of reviews and optimization in the 
    SVN trunk.

* 12 May 2006 - HttpClient issue tracking migrated to Jira

    HttpClient issue tracking has migrated from Bugzilla to Jira. Please use 
    {{{http://issues.apache.org/jira/browse/HTTPCLIENT}this project}} in Jira 
    to report new issues against HttpClient and search for reported ones. All existing 
    issue reports can be accessed in Jira by their original Bugzilla bug id. 

* 29 April 2006 - New Project Logo  

    HttpComponents project now has a brand new logo kindly contributed by Regula Wernli.

    Many thanks, Regula! 

* 23 April 2006 - HttpComponents HttpCore 4.0-alpha1 released 

    This is the first ALPHA release of HttpCore intended for API review and use in 
    experimental projects. The HttpCore API is still deemed unstable and it can still 
    undergo significant changes based on the feedback from early adopters. 

* 12 February 2006 - Welcome new HttpComponents committer Roland Weber 

    By 5 binding votes in favor and none against Roland Weber has been voted in as a new 
    HttpComponents committer. Roland has been an invaluable contributor to the Jakarta 
    Commons HttpClient project for many years and he is the very first committer to
    join the Jakarta HttpComponents project.

    Welcome, Roland

* 31 October 2005 - Jakarta HttpClient becomes Jakarta HttpComponents

    By the count 15 votes in favor, Jakarta HttpClient as been renamed as Jakarta HttpComponents. 
    The Jakarta PMC has approved the new project charter and the new project scope.

* 16 April 2004 - Welcome Jakarta HttpClient!

    By the count 26 votes in favor, none against, Jakarta Commons HttpClient as been promoted to 
    the Jakarta sub-project level 
