Release 4.2
-------------------

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.


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

* [HTTPCLIENT-1187] If a revalidation response is deemed too old CachingHttpClient fails to  
  consume its content resulting in a connection leak.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCLIENT-1186] State of newly created connections in the connection pool is not always 
  correctly updated potentially allowing those connections to be leased to users with a different 
  security context. 
  Contributed by Ralf Poehlmann <rpn at methodpark.de> 

* [HTTPCLIENT-1179] Upgraded Commons Codec dependency to version 1.6
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCLIENT-1177] always remove fragments from request URIs
  Contributed by Oleg Kalnichevski <olegk at apache.org>

Incompatible changes
--------------------
[Compared to release version 4.1.3]

The following fields have been deprecated for some time now and have been deleted:

org.apache.http.client.params.ClientPNames#CONNECTION_MANAGER_FACTORY
org.apache.http.impl.cookie.BrowserCompatSpec#DATE_PATTERNS

The following methods have been deprecated for some time now and have been deleted:

org.apache.http.client.params.ClientParamBean#setConnectionManagerFactory(org.apache.http.conn.ClientConnectionManagerFactory)
org.apache.http.client.protocol.ClientContextConfigurer#setAuthSchemePref(java.util.List)
org.apache.http.entity.mime.content.FileBody#writeTo(java.io.OutputStream, int)
org.apache.http.entity.mime.content.InputStreamBody#writeTo(java.io.OutputStream, int)
org.apache.http.entity.mime.content.StringBody#writeTo(java.io.OutputStream, int)

The following classes have been deprecated for some while now and have been deleted:

org.apache.http.impl.conn.tsccm.RefQueueHandler
org.apache.http.impl.conn.tsccm.AbstractConnPool no longer implements interface org.apache.http.impl.conn.tsccm.RefQueueHandler
org.apache.http.impl.conn.tsccm.ConnPoolByRoute no longer implements interface org.apache.http.impl.conn.tsccm.RefQueueHandler
org.apache.http.impl.conn.tsccm.RefQueueWorker



Release 4.2 BETA1
-------------------

This is the first BETA release of HttpClient 4.2. This release completes development of several
notable enhancements in HttpClient:

* 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. As of release 4.2 HttpClient will be using
  pooling connection manager per default.

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


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

* [HTTPCLIENT-1164] Compressed entities are not being cached properly.
  Contributed by Jon Moore <jonm at apache dot org>.

* [HTTPCLIENT-1154] MemcachedHttpCacheStorage should allow client to
  specify custom prefix string for keys.
  Contributed by Jon Moore <jonm at apache dot org>.
  
* [HTTPCLIENT-1153] MemcachedHttpCacheStorage uses URL as cache key;
  shouldn't due to fixed maximum-length memcached keys.
  Contributed by Jon Moore <jonm at apache dot org>.
  
* [HTTPCLIENT-1157] MemcachedHttpCacheStroage should throw IOExceptions
  instead of RuntimeExceptions.
  Contributed by James Miller <jamesmiller01 at gmail dot com>.
  
* [HTTPCLIENT-1152] MemcachedHttpCacheStorage should verify class of
  returned object before casting.
  Contributed by Rajika Kumarasiri <rajika at wso2 dot com>.

* [HTTPCLIENT-1155] CachingHttpClient fails to ensure that the response content gets fully consumed 
  when using a ResponseHandler, which can potentially lead to connection leaks.
  Contributed by James Miller <jamesmiller01 at gmail dot com>
  
* [HTTPCLIENT-1147] When HttpClient-Cache cannot open cache file, should act like miss.
  Contributed by Joe Campbell <joseph.r.campbell at gmail.com>

* [HTTPCLIENT-1137] Values for the Via header are cached and reused by httpclient-cache.
  Contributed by Alin Vasile <alinachegalati at yahoo dot com>

* [HTTPCLIENT-1142] Infinite loop on NTLM authentication failure.
  Contributed by Oleg Kalnichevski <olegk at apache.org>
  
* [HTTPCLIENT-1143] CachingHttpClient leaks connections with stale-if-error.
  Contributed by James Miller <jamesmiller01 at gmail dot com>

Release 4.2 ALPHA1
-------------------

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 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. As of release 4.2 HttpClient will be using
  pooling connection manager per default.

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

Please note that new features included in this release are still considered experimental and
their API may change in the future ALPHA releases.

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

* [HTTPCLIENT-1128] SystemDefaultHttpClient (HttpClient implementation initialized using system
  properties).
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCLIENT-1135] RandomAccessFile mode 'w' used by HttpClientCache is not valid.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCLIENT-1131] HttpClient to authenticate preemptively using BASIC scheme if a userinfo
  attribute is specified in the request URI.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCLIENT-1134] make BasicResponseHandler consume response content in case of an unsuccessful
  result (status code >= 300).
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCLIENT-1132] ProxyClient implementation.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCLIENT-1127] fixed dead-lock between SingleClientConnManager and AbstractPooledConnAdapter.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCLIENT-1107] Auth framework redesign.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCLIENT-1116] ResponseCachingPolicy uses integers for sizes
  Contributed by Greg Bowyer <gbowyer at fastmail.co.uk >

* [HTTPCLIENT-1123] Support for pluggable DNS resolvers.
  Contributed by Alin Vasile <alinachegalati at yahoo dot com>

* [HTTPCLIENT-1120] DefaultHttpRequestRetryHandler#retryRequest should not retry aborted requests.
  Contributed by Alin Vasile <alinachegalati at yahoo dot com>

* Support for auth-int qop (quality of protection) option in Digest auth scheme.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCLIENT-1076] Fluent facade API (Google summer of code 2011 project).
  Contributed by Xu Lilu <cookieme at gmail.com>

* UriBuilder implementation.
  Contributed by Xu Lilu <cookieme at gmail.com>

* Redesign of connection management classes based on new pooling components from HttpCore.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCLIENT-1111] Added #prepareSocket method to SSLSocketFactory.
  Contributed by Pasi Eronen <pe at iki.fi>

* Added #reset() and #releaseConnection() methods to HttpRequestBase.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCLIENT-1105] AutoRetryHttpClient: built-in way to do auto-retry for certain status codes.
  Contributed by Dan Checkoway <dcheckoway at gmail.com>

* [HTTPCLIENT-1094] Digest auth scheme refactoring.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Lax implementation of RedirectStrategy.
  Contributed by Bartosz Firyn <songo.bercik at interia.pl>

* [HTTPCLIENT-1044] HttpRequestRetryHandler implementation compliant with the definition of
  idempotent methods given in the RFC 2616.
  Contributed by Oleg Kalnichevski <olegk at apache.org>


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

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

* [HTTPCLIENT-1100] Missing Content-Length header makes cached entry invalid
  Contributed by Bart Robeyns <bart dot robeyns at gmail dot com>

* [HTTPCLIENT-1098] Avoid expensive reverse DNS lookup on connect timeout exception. 
  Contributed by Thomas Boettcher <tboett at gmail.com>

* [HTTPCLIENT-1097] BrowserCompatHostnameVerifier and StrictHostnameVerifier should handle 
  wildcards in SSL certificates better.
  Contributed by Sebastian Bazley <sebb at apache.org>

* [HTTPCLIENT-1092] If ClientPNames.VIRTUAL_HOST does not provide the port, derive it from the 
  current request.
  Contributed by Sebastian Bazley <sebb at apache.org>

* [HTTPCLIENT-1087] NTLM proxy authentication fails on retry if the underlying connection is closed
  as a result of a target authentication failure.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCLIENT-1079] Fixed Kerberos cross-realm support
  Contributed by Michael Osipov <1983-01-06 at gmx.net> 

* [HTTPCLIENT-1078] Decompressing entities (DeflateDecompressingEntity, GzipDecompressingEntity) 
  do not close content stream in #writeTo() method.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCLIENT-1075] Decompressing entities (DeflateDecompressingEntity, GzipDecompressingEntity) 
  do not correctly handle content streaming.
  Contributed by James Abley <james.abley at gmail.com> 

* [HTTPCLIENT-1051] Avoid reverse DNS lookups when opening SSL connections by IP address.
  Contributed by Oleg Kalnichevski <olegk at apache.org>


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

HttpClient v4.1.1 is a bug fix release that addresses a number of issues reported since 
release 4.1, including one critical security issue (HTTPCLIENT-1061). All users of HttpClient 4.0.x 
and 4.1 are strongly encouraged to upgrade.

* [HTTPCLIENT-1069] HttpHostConnectException not correctly retried for direct and non-tunnelled 
  proxy connections. 
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCLIENT-1066] Changed the way URIUtils#rewriteURI handles multiple consecutive slashes in the
  URI path component: multiple leading slashes will be replaced by one slash in order to avoid
  confusion with the authority component. The remaining content of the path will not be modified. 
  (also see HTTPCLIENT-929).   
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCLIENT-1061] Fixed critical bug causing Proxy-Authorization header to be sent to the target
  host when tunneling requests through a proxy server that requires authentication.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCLIENT-1056] Fixed bug causing the RequestAuthCache protocol interceptor to generate
  an invalid AuthScope instance when looking up user credentials for preemptive authentication. 
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCLIENT-1053] Fixed the way DigestScheme generates nonce-count values.  
  Contributed by Oleg Kalnichevski <olegk at apache.org>


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

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.

IMPORTANT: please note that the HttpClient 3.x branch is now officially END OF LIFE and is no longer
maintained and supported by the Apache HttpComponents project.

Changelog
-------------------
* The public API for the caching module had a minor change between 4.1-beta and 4.1-GA to the
  HttpCacheEntry class - the deprecated public Set<String> getVariantURIs() method and constructor 
  public HttpCacheEntry(Date requestDate, Date responseDate,
            StatusLine statusLine, Header[] responseHeaders,
            Resource resource, Set<String> variants)
  were both removed.  This will not affect you unless you are implementing new storage backends
  that use the deprecated code and/or are implementing custom serializers for cache entries.

* Changed Browser-Compatibility and Best-Match cookie policies to emulate the behaviour of FireFox
  more closely when parsing Netscape style cookies. Comma will no longer be treated as a header
  element separator if Set-Cookie does not contain a Version attribute mandated by the 
  RFC2109 / RFC 2965 cookie specifications.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCLIENT-1036] StringBody has incorrect default for characterset. (Default changed 
  to US-ASCII)
  Contributed by Sebastian Bazley <sebb at apache.org>

* [HTTPCLIENT-975] Support stale-if-error and stale-while-revalidate extension directive (RFC5861).
  Contributed by Mohammed Azeem Uddin <mohammedazeem_uddin at comcast.com>,
  Michajlo Matijkiw <michajlo_matijkiw at comcast.com>, and
  Matthew Hawthorne <matthew_hawthorne at comcast.com>.

* [HTTPCLIENT-1033] HttpRoute.equals(Object o) is quite inefficient, as it does not take full 
  advantage of shortcut logic.
  Contributed by Sebastian Bazley <sebb at apache.org>

* [HTTPCLIENT-1030] Implement "ignoreCookies" CookieSpec
  Contributed by Sebastian Bazley <sebb at apache.org>

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

HttpClient 4.1 BETA1 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. The NTLM protocol code was kindly contributed by the Lucene Connector Framework 
project.

Changelog
-------------------
* [HTTPCLIENT-1015] Support only-if-cached directive.
  Contributed by Michajlo Matijkiw <michajlo_matijkiw at comcast.com>

* [HTTPCLIENT-990] Allow heuristic freshness caching.
  Contributed by Michajlo Matijkiw <michajlo_matijkiw at comcast.com>

* [HTTPCLIENT-919] Support for NTLMv1, NTLMv2, and NTLM2 Session authentication.
  Contributed by Karl Wright <karl.wright at nokia.com>

* [HTTPCLIENT-1008] Send all variants' ETags on "variant miss".
  Contributed by Michajlo Matijkiw <michajlo_matijkiw at comcast.com> and 
  Mohammed Azeem Uddin <mohammedazeem_uddin at comcast.com>

* [HTTPCLIENT-1011] Handling of IOExceptions thrown by cache components.
  Contributed by Jonathan Moore <jonathan_moore at comcast.com>

* [HTTPCLIENT-1003] Handle conditional requests in cache.
  Contributed by Michajlo Matijkiw <michajlo_matijkiw at comcast.com> and 
  Mohammed Azeem Uddin <mohammedazeem_uddin at comcast.com>

* [HTTPCLIENT-1002] Stale connection check fails if wire logging is on.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCLIENT-1000] Maximum connection lifetimes settings for ThreadSafeClientConnManager.
  Contributed by Michajlo Matijkiw <michajlo_matijkiw at comcast.com>

* [HTTPCLIENT-960] HttpMultipart doesn't generate Content-Type header for binary parts in
  BROWSER_COMPATIBLE mode.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCLIENT-998] Cache should use both Last-Modified and ETag for validations when available.
  Contributed by Jonathan Moore <jonathan_moore at comcast.com> 

* [HTTPCLIENT-997] Cache module should handle out-of-order validations properly and unconditionally 
  refresh.
  Contributed by Jonathan Moore <jonathan_moore at comcast.com> 

* [HTTPCLIENT-994] Cache does not allow client to override origin-specified freshness using 
  max-stale.
  Contributed by Jonathan Moore <jonathan_moore at comcast.com>

* [HTTPCLIENT-995] Cache returns cached responses even if validators not consistent with all 
  conditional headers.
  Contributed by Jonathan Moore <jonathan_moore at comcast.com>

* [HTTPCLIENT-977] Memcached implementation for HttpCache.
  Contributed by Mohammed Azeem Uddin <mohammedazeem_uddin at comcast.com>

* [HTTPCLIENT-992] cache should not generate stale responses to requests explicitly requesting 
  first-hand or fresh ones.
  Contributed by Jonathan Moore <jonathan_moore at comcast.com>

* [HTTPCLIENT-991] cache module produces improperly formatted Warning header when revalidation 
  fails.
  Contributed by Jonathan Moore <jonathan_moore at comcast.com>

* [HTTPCLIENT-989] DefaultHttpRequestRetryHandler no longer retries non-idempotent http methods
  if NoHttpResponseException is thrown.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCLIENT-988] Cache module should strip 'Content-Encoding: identity' from responses
  Contributed by Jonathan Moore <jonathan_moore at comcast.com>

* [HTTPCLIENT-987] cache module does not recognize equivalent URIs.
  Contributed by Jonathan Moore <jonathan_moore at comcast.com>

* [HTTPCLIENT-986] cache module does not completely handle upstream Warning headers correctly
  Contributed by Jonathan Moore <jonathan_moore at comcast.com>

* [HTTPCLIENT-985] cache module should populate Via header to capture upstream and downstream protocols
  Contributed by Jonathan Moore <jonathan_moore at comcast.com>

* [HTTPCLIENT-984] Additional conditional compliance tests for the caching module for 
  Content-Encoding, Content-Location, Date, Expires, Server, Transfer-Encoding, and Vary headers.
  Contributed by Jonathan Moore <jonathan_moore at comcast.com>

* [HTTPCLIENT-978] HTTP cache update exception handling
  Contributed by Michajlo Matijkiw <michajlo_matijkiw at comcast.com>

* [HTTPCLIENT-981] CachingHttpClient returns a 411 respones when executing a POST (HttpPost) 
  request.
  Contributed by Joe Campbell <joseph.r.campbell at gmail.com>

* [HTTPCLIENT-980] CachingHttpClient returns a 503 response when the backend HttpClient produces 
  an IOException.
  Contributed by Jonathan Moore <jonathan_moore at comcast.com>

* [HTTPCLIENT-978] Ehcache based HTTP cache implementation
  Contributed by Michajlo Matijkiw <michajlo_matijkiw at comcast.com>

* [HTTPCLIENT-967] support for non-shared (private) caches
  Contributed by Jonathan Moore <jonathan_moore at comcast.com>
  
* [HTTPCLIENT-969] BasicCookieStore#getCookies() to return a copy of Cookie list
  Contributed by David Smiley <dsmiley at mitre.org>

* [HTTPCLIENT-965] Fixed problem with cache not honoring must-revalidate or
  proxy-revalidate Cache-Control directives.
  Contributed by Jonathan Moore <jonathan_moore at comcast.com>

* [HTTPCLIENT-964] 'no-cache' directives with field names are no longer transmitted
  downstream.
  Contributed by Jonathan Moore <jonathan_moore at comcast.com>

* [HTTPCLIENT-963] Fixed handling of 'Cache-Control: no-store' on requests.
  Contributed by Jonathan Moore <jonathan_moore at comcast.com>

* [HTTPCLIENT-962] Fixed handling of Authorization headers in shared cache mode.
  Contributed by Jonathan Moore <jonathan_moore at comcast.com>

* [HTTPCLIENT-961] Not all applicable URIs are invalidated on PUT/POST/DELETEs
  that pass through client cache.
  Contributed by Jonathan Moore <jonathan_moore at comcast.com>

* [HTTPCLIENT-958] Client cache no longer allows incomplete responses to be
  passed on to the client.
  Contributed by Jonathan Moore <jonathan_moore at comcast.com>

* [HTTPCLIENT-951] Non-repeatable entity enclosing requests are not correctly
  retried when 'expect-continue' handshake is active.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCLIENT-948] In rare circumstances the idle connection handling code
  can leave closed connections in a inconsistent state.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCLIENT-953] IllegalStateException thrown by RouteSpecificPool.
  Contributed by Guillaume <gueugaie at gmail.com>

* [HTTPCLIENT-952] Trust store parameter is ignored by SSLSocketFactory
  (affects version 4.1-alpha2 only)
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCLIENT-937] CacheEntry made immutable; now uses immutable HttpEntity
  to store cached content.
  Contributed by David Mays <david_mays at comcast.com> and
  Oleg Kalnichevski <olegk at apache.org>

Release 4.1 ALPHA2
-------------------

HttpClient 4.1 ALPHA2 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)

Compatibility notes
-------------------
(1) Please note the HTTP caching module is still considered experimental and
its API may change significantly in the future releases.

(2) This release eliminates Mime4J as a dependency for the HttpMime module.
HttpMime is no longer binary compatible with the previous releases.
Full API and binary compatibility between minor versions of HttpMime will be
maintained as of 4.1 GA release.

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

* [HTTPCLIENT-936] Fixed bug causing NPE or an infinite loop in
  the authentication code in case of a SPNEGO authentication failure.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCLIENT-427] HTTP caching support
  Contributed by Joe Campbell, David Cleaver, David Mays, Jon Moore, Brad Spenla

* Dropped dependency on Mime4j for HttpMime.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Extended SSLSocketFactory with a mechanism to bypass the standard certificate
  trust verification (primarily to simplify dealing with self-signed
  certificates)
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCLIENT-898] Improved support for host multihoming
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCLIENT-916] UsernamePasswordCredentials, NTUserPrincipal,
  BasicClientCookie, BasicClientCookie2 and BasicCookieStore made Serializable.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCLIENT-914] Upgraded Commons Codec dependency to version 1.4
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCLIENT-903] Use ConcurrentHashMap instead of [Linked]HashMap for
  thread-safety. Improve performance of AuthSchemeRegistry, CookieSpecRegistry
  and SchemeRegistry classes.
  Contributed by Sebastian Bazley <sebb at apache.org>

* [HTTPCLIENT-902] HttpRequestRetryHandler not called on I/O exceptions
  thrown when opening a new connection.
  Contributed by Olivier Lamy <olamy at apache.org> and
  Oleg Kalnichevski <olegk at apache.org>

Release 4.1 ALPHA1
-------------------

HttpClient 4.1 ALPHA1 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.

* 5 to 10% performance increase due to elimination of unnecessary Log object
  lookups by short-lived components.

Please note all methods and classes added in this release and marked as
4.1 are API unstable and can change in the future 4.1 ALPHA releases.

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

* [HTTPCLIENT-889] 'expect: continue' handshake disabled per default.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCLIENT-862] Extended client's redirect handling interface to allow
  control of the content of the redirect.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCLIENT-872] HttpClient can now persist authentication data between request
  executions as long as they share the same execution context. It has also become
  much easier to make HttpClient authenticate preemptively by pre-populating
  authentication data cache.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCLIENT-883] SO_TIMEOUT is not reset on persistent (re-used) connections.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCLIENT-832] Distinguish cookie format errors from violations of
  restrictions imposed by a cookie specification. In the latter case
  CookieRestrictionViolationException will be thrown.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCLIENT-523] Support for SPNEGO authentication scheme.
  Contributed by Matthew Stevenson <mavricknzwork at yahoo.com>

* Simplified configuration of connection managers. Total connection maximum
  and maximum connection per route limits can be set using methods of
  the class instead of HTTP parameters.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Added parameters to define the order of preference for supported auth
  schemes for target host and proxy authentication.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCLIENT-875] DefaultClientConnectionOperator#openConnection doesn't
  update the connection state if the connection socket changed after
  the call to SocketFactory#connectSocket().
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCLIENT-834] Transparent content encoding support.
  Contributed by James Abley <james.abley at gmail.com>

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

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

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

* [HTTPCLIENT-895] Eliminated Log lookups in short lived objects impairing
  performance.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCLIENT-885] URLEncodedUtils now correctly parses form-url-encoded
  entities that specify a charset.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCLIENT-884] UrlEncodedFormEntity now sets charset on the Content-Type
  header.
  Contributed by Jared Jacobs <jmjacobs at cs.stanford.edu>

* [HTTPCLIENT-883] SO_TIMEOUT is not reset on persistent (re-used) connections.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCLIENT-882] Auth state is now correctly updated if a successful NTLM
  authentication results in a redirect. This is a minor bug as HttpClient
  manages to recover from the problem automatically.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCLIENT-881] Fixed race condition in AbstractClientConnAdapter that makes
  it possible for an aborted connection to be returned to the pool.
  Contributed by Tim Boemker <tboemker at elynx.com> and
  Oleg Kalnichevski <olegk at apache.org>

* [HTTPCLIENT-866] Removed dependency on jcip-annotations.jar.
  Contributed by Oleg Kalnichevski <olegk at apache.org>
  and Sebastian Bazley <sebb at apache.org>


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

HttpClient 4.0 represents a complete, ground-up redesign and almost a complete
rewrite of the 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.


Architectural changes
---------------------

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

* Cleaner, more flexible and expressive API.

* More modular structure.

* Better performance and smaller memory footprint due to a more efficient HTTP
  transport based on HttpCore.

* Implementation of cross-cutting HTTP protocol aspects through protocol
  interceptors.

* Improved connection management, better handling of persistent connections,
  support for stateful connections

* Pluggable redirect and authentication handlers.

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

* More flexible SSL context customization

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


Important notes
-------------------

* Future releases of HttpMime module may be binary incompatible with this
  release due to possible API changes in Apache Mime4J. Apache Mime4J is
  still being actively developed and its API is considered unstable.

* HttpClient 4.0 is not fully binary compatible with 4.0 BETA1 release.
  Some protected variables in connection management class have been
  made final in order to help ensure their thread safety:

    org.apache.http.conn.BasicEofSensorWatcher#attemptReuse
    org.apache.http.conn.BasicEofSensorWatcher#managedConn
    org.apache.http.impl.conn.DefaultClientConnectionOperator#schemeRegistry
    org.apache.http.impl.conn.DefaultHttpRoutePlanner#schemeRegistry
    org.apache.http.impl.conn.ProxySelectorRoutePlanner#schemeRegistry
    org.apache.http.impl.conn.SingleClientConnManager#alwaysShutDown
    org.apache.http.impl.conn.SingleClientConnManager#connOperator
    org.apache.http.impl.conn.SingleClientConnManager#schemeRegistry
    org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager#connOperator
    org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager#schemeRegistry


Bug fixes since 4.0 BETA2 release
-------------------

* [HTTPCLIENT-861] URIUtils#resolve is now compatible with all examples given
  in RFC 3986.
  Contributed by Johannes Koch <johannes.koch at fit.fraunhofer.de>

* [HTTPCLIENT-860] HttpClient no longer converts redirects of PUT/POST to GET
  for status codes 301, 302, 307, as required by the HTTP spec.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCLIENT-859] CookieIdentityComparator now takes path attribute into
  consideration when comparing cookies.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* HttpClient will no longer send expired cookies back to the origin server.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCLIENT-856] Proxy NTLM authentication no longer fails on a redirect to
  a different host.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCLIENT-841] Removed automatic connection release using garbage collection
  due to a memory leak.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCLIENT-853] Fixed bug causing invalid cookie origin port to be selected
  when the target is accessed on the default port and the connection is
  established via a proxy.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCLIENT-852] Fixed bug causing automatically retried redirects fail with
  CircularRedirectException.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Fixed problem with the default HTTP response parser failing to handle garbage
  preceding a valid HTTP response.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* NonRepeatableRequestExceptions now include the cause that the original
  request failed.
  Contributed by Sam Berlin <sberlin at apache.org>

* [HTTPCLIENT-837] Fixed problem with the wire log skipping zero byte values
  if read one byte at a time.
  Contributed by Kirill Safonov <ksafonov at swiftteams.com>

* [HTTPCLIENT-823] 'http.conn-manager.max-total' parameter can be adjusted
  dynamically. However, the size of existing connection pools per route,
  once allocated, will not be adjusted.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCLIENT-822] Default socket factories to rethrow SocketTimeoutException
  as ConnectTimeoutException in case of connect failure due to a time out.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCLIENT-813] Fixed default port resolution. Invalid ports no longer
  get replaced with the default port value.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

Release 4.0 beta 2
-------------------

BETA2 is a maintenance release, which 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.

* Fixed NPE in DefaultRequestDirector thrown when retrying a failed
  request over a proxied connection.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCLIENT-803] Fixed bug in SSL host verifier implementations
  causing the SSL certificate to be rejected as invalid if the connection
  is established using an IP address.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCLIENT-806] DefaultHttpMethodRetryHandler will no longer retry
  on ConnectExceptions.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* DigestScheme can use an arbitrary digest algorithm requested by the
  target server (such as SHA) as long as this algorithm is supported by
  the Java runtime.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Fixed parsing and validation of RFC2109 compliant Set-Cookie headers
  by the Best-Match cookie spec.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Fixed bug that can cause a managed connection to be returned from the
  pool in an inconsistent state.
  Contributed by Oleg Kalnichevski <olegk at apache.org>


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

BETA1 release 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.

There has been a number of important bug fixes since ALPHA4. All upstream
projects are encouraged to upgrade to the latest release.

Please note HttpClient currently provides only limited support for NTLM
authentication. For details please see NTLM_SUPPORT.txt.

-------------------

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

* [HTTPCLIENT-790] Protocol interceptors are now correctly invoked when
  executing CONNECT methods.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCLIENT-668] Do not use static loggers.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCLIENT-781] Respect Keep-Alive header's timeout value.
  Contributed by Sam Berlin <sberlin at apache.org>

* [HTTPCLIENT-779] Top-level classes (HttpClient, and HttpGet, HttpPut
  and similar HttpMethods) throw fewer checked exceptions.
  Contributed by Sam Berlin <sberlin at apache.org>

* HttpClient will throw an exception if an attempt is made to retry
  a request with a non-repeatable request entity.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Fixed request re-generation logic when retrying a failed request.
  Auto-generated headers will no accumulate.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCLIENT-424] Preemptive authentication no longer limited to BASIC
  scheme only. HttpClient can be customized to authenticate preemptively
  with DIGEST scheme.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCLIENT-670] Pluggable hostname resolver.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCLIENT-719] Clone support for HTTP request and cookie objects.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCLIENT-776] Fixed concurrency issues with AbstractPoolEntry.
  Contributed by Sam Berlin <sberlin at gmail.com>

* Resolved a long standing problem with HttpClient not taking into account
  the user context when pooling / re-using connections. HttpClient now
  correctly handles stateful / user specific connections such as persistent
  NTLM connections and SSL connections with client side authentication.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCLIENT-773] Improved handling of the 'expires' attribute by the
  'Best Match' cookie spec.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Partial NTLM support (requires an external NTLM engine). For details see
  NTLM_SUPPORT.txt
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Redesigned local execution context management.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

--------------------------------------

Release 4.0 Alpha 4
-------------------

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

NTLM authentication remains the only missing major feature in the new
codeline that prevents us from moving awards the API freeze.

There has been a number of important bug fixes since ALPHA3. All upstream
projects are encouraged to upgrade to the latest release.

-------------------

HttpClient 3.x features that have NOT yet been ported:
-------------------

* NTLM authentication scheme

-------------------

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

* [HTTPCLIENT-765] String.toLowerCase() / toUpperCase() should specify
  Locale.ENGLISH
  Contributed by Sebastian Bazley <sebb at apache.org>

* [HTTPCLIENT-769] Do not pool connection marked non-reusable.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCLIENT-763] Fixed problem with AbstractClientConnAdapter#abortConnection()
  not releasing the connection if called from the main execution thread while
  there is no blocking I/O operation.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCLIENT-652] Added optional state attribute to managed client connections.
  This enables connection managers to correctly handle stateful connections.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCLIENT-673] Revised max connections per route configuration
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCLIENT-753] Class Scheme and related classes moved to a separate package
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCLIENT-757] Improved request wrapping in the DefaultClientRequestDirector.
  This also fixed the problem with the default proxy set at the client level
  having no effect.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCLIENT-734] Request abort will unblock the thread waiting for a connection
  Contributed by Sam Berlin <sberlin at gmail.com>

* [HTTPCLIENT-759] Ensure release of connections back to the connection manager
  on exceptions.
  Contributed by Sam Berlin <sberlin at gmail.com>

* [HTTPCLIENT-758] Fixed the use of generics in AbstractHttpClient
  #removeRequestInterceptorByClass and #removeResponseInterceptorByClass
  Contributed by Johannes Koch <johannes.koch at fit.fraunhofer.de>

* [HTTPCLIENT-749] HttpParams beans
  Contributed by Stojce Dimski <sdmiski at yahoo.it>

* [HTTPCLIENT-755] Workaround for known bugs in java.net.URI.resolve()
  Bug ID: 4708535
  Contributed by Johannes Koch <johannes.koch at fit.fraunhofer.de>

--------------------------------------

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

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

-------------------

HttpClient 3.x features that have NOT yet been ported:
-------------------

* NTLM authentication scheme

-------------------

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

* [HTTPCLIENT-742] common interface for HttpRoute and RouteTracker
  Contributed by Roland Weber <rolandw at apache.org>

* [HTTPCLIENT-741] Fixed concurrency issues in AbstractClientConnAdapter.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCLIENT-726] testcase for spurious wakeups in ThreadSafeClientConnManager
  Contributed by Roland Weber <rolandw at apache.org>

* [HTTPCLIENT-643] Automatic connect fail-over for multi-home remote servers.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCLIENT-735] unsetting of DEFAULT_PROXY and FORCED_ROUTE in hierarchies
  Contributed by Roland Weber <rolandw at apache.org>

* [HTTPCLIENT-723] route planner based on java.net.ProxySelector
  Contributed by Roland Weber <rolandw at apache.org>

* [HTTPCLIENT-740] don't start connection GC thread in pool constructor
  Contributed by Roland Weber <rolandw at apache.org>

* [HTTPCLIENT-736] route planners use SchemeRegistry instead of ConnManager
  Contributed by Roland Weber <rolandw at apache.org>

* [HTTPCLIENT-730] Fixed rewriting of URIs containing escaped characters
  Contributed by Sam Berlin <sberlin at gmail.com> and
  Oleg Kalnichevski <olegk at apache.org>

* [HTTPCLIENT-667] Added 'Meta' cookie policy that selects a cookie
  specification depending on the format of the cookie(s).
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCLIENT-729] Move HttpRoute and related classes to routing package.
  Contributed by Roland Weber <rolandw at apache.org>

* [HTTPCLIENT-725] Use TimeUnit arguments for timeouts in connection manager.
  Contributed by Roland Weber <rolandw at apache.org>

* [HTTPCLIENT-677] Connection manager no longer uses Thread.interrupt().
  Contributed by Roland Weber <rolandw at apache.org>

* [HTTPCLIENT-716] Allow application-defined routes.
  Contributed by Roland Weber <rolandw at apache.org>

* [HTTPCLIENT-712] Improve HttpRoute API
  Contributed by Roland Weber <rolandw at apache.org>

* [HTTPCLIENT-711] Bad route computed for redirected requests
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCLIENT-715] Remove RoutedRequest from API
  Contributed by Roland Weber <rolandw at apache.org>

* [HTTPCLIENT-705] Fixed incorrect handling of URIs with null path component.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCLIENT-688] HttpOptions#getAllowedMethods can now handle multiple
  Allow headers.
  Contributed by Andrea Selva <selva.andre at gmail.com>

--------------------------------------

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

ALPHA2 release is another milestone in the redesign of HttpClient. It 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.

-------------------

HttpClient 3.x features that have NOT yet been ported
-------------------
* NTLM authentication scheme

* Support for multipart MIME coded entities

-------------------

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

* [HTTPCLIENT-698] Resolve non-absolute redirect URIs relative to
  the request URI
  Contributed by Johannes Koch <johannes.koch at fit.fraunhofer.de>

* [HTTPCLIENT-697] Throw a more intelligible exception when connection
  to a remote host cannot be established.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCLIENT-689] Caching of SimpleDateFormat in DateUtils
  Contributed by Daniel Müller <strider at digitalstrider.com>

* [HTTPCLIENT-689] stackable parameters in AbstractHttpClient
  Contributed by Roland Weber <rolandw at apache.org>

* [HTTPCLIENT-477] Use distinct instances of the authentication handler
  interface for authentication with target and proxy hosts
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCLIENT-690] ManagedClientConnection provides access to SSLSession
  Contributed by Roland Weber <rolandw at apache.org>

* [HTTPCLIENT-692] ClientConnectionManager throws InterruptedException
  Contributed by Roland Weber <rolandw at apache.org>

* [HTTPCORE-116] moved parameter names to interfaces
  Contributed by Roland Weber <rolandw at apache.org>

* [HTTPCLIENT-649] support for proxy chains in HttpConn
  Contributed by Roland Weber <rolandw at apache.org>

* [HTTPCLIENT-636] refactor ThreadSafeClientConnManager in separate package
  Contributed by Roland Weber <rolandw at apache.org>

* [HTTPCLIENT-669] new HttpRoutePlanner interface and implementation
  Contributed by Andrea Selva <selva.andre at gmail.com>

* [HTTPCLIENT-653] detached connection wrapper no longer prevents
  garbage collection of ThreadSafeClientConnManager
  Contributed by Roland Weber <rolandw at apache.org>

* [HTTPCLIENT-674] use org.apache.http.util.VersionInfo instead of a local one
  Contributed by Roland Weber <rolandw at apache.org>

* [HTTPCLIENT-666] Replaced HttpState with CredentialsProvier and CookieStore interfaces
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCORE-100] revised HttpContext hierarchy
  Contributed by Roland Weber <rolandw at apache.org>

* [HTTPCLIENT-618] eliminate class HostConfiguration
  Contributed by Roland Weber <rolandw at apache.org>

* [HTTPCLIENT-672] re-sync with API changes in core alpha6-SNAPSHOT
  Contributed by Roland Weber <rolandw at apache.org>

--------------------------------------

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

HttpClient 4.0 represents a complete, ground-up redesign and almost a complete
rewrite of the 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.

The HttpClient 4.0 API is still very experimental and is bound to change
during the course of the ALPHA development phase. Several important features
have not yet been ported to the new API.

Architectural changes
---------------------

* 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

-------------------

HttpClient 3.x features that have NOT yet been ported
-------------------
* NTLM authentication scheme

* RFC2965 cookie policy (Cookie2)

* Support for multipart MIME coded entities

-------------------

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

The following is a list of contributions tracked in JIRA.
Note that this is not a complete list of contributions or changes.
Since the API was redesigned completely, tracking everything outside
of the source code repository would have been too burdensome.

* [HTTPCLIENT-655] User-Agent string no longer violates RFC
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCLIENT-541] Virtual host API redesign
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCLIENT-614] Allow for different strategies when checking
  CN of x509 certificates
  Contributed by Julius Davies <juliusdavies at gmail.com>

* [HTTPCLIENT-136] Fixed inadequate proxy support
  Long standing architectural problem. Issue opened on 19/Dec/2002.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCLIENT-63] Support for pluggable redirect and authentication handlers
  Long standing architectural problem. Issue opened on 15/Jul/2002.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCLIENT-245] Fixed redirect handling. HttpClient can now automatically
  handle redirects of entity enclosing requests.
  Long standing architectural problem. Issue opened on 14/Jul/2003.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCLIENT-613] HTTPS connections now verify CN of x509 certificates
  Contributed by Julius Davies <juliusdavies at gmail.com>

* [HTTPCLIENT-497] Wire/header logger names consistent with class loggers
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCLIENT-484] AuthSSLProtocolSocketFactory in the main distribution
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCLIENT-589] Do not consume the remaining response content if
  the connection is to be closed
  Contributed by Roland Weber <rolandw at apache.org>

* [HTTPCLIENT-475] Support for unconnected sockets. HTTP requests can now be
  aborted while network socket is still being connected.
  Contributed by Roland Weber <rolandw at apache.org>

