## org.apache.http.impl.client.cache
Class CachingHttpClient

    java.lang.Object
      org.apache.http.impl.client.cache.CachingHttpClient

All Implemented Interfaces:
  HttpClient

    @ThreadSafe
    public class CachingHttpClient

extends Object
implements HttpClient

The `CachingHttpClient` is meant to be a drop-in replacement for a `DefaultHttpClient` that transparently adds client-side caching. The current implementation is conditionally compliant with HTTP/1.1 (meaning all the MUST and MUST NOTs are obeyed), although quite a lot, though not all, of the SHOULDs and SHOULD NOTs are obeyed too. Generally speaking, you construct a `CachingHttpClient` by providing a "backend" `HttpClient` used for making actual network requests and provide an `HttpCacheStorage` instance to use for holding onto cached responses. Additional configuration options can be provided by passing in a `CacheConfig`. Note that all of the usual client related configuration you want to do vis-a-vis timeouts and connection pools should be done on this backend client before constructing a `CachingHttpClient` from it.

Generally speaking, the `CachingHttpClient` is implemented as a Decorator of the backend client; for any incoming request it attempts to satisfy it from the cache, but if it can't, or if it needs to revalidate a stale cache entry, it will use the backend client to make an actual request. However, a proper HTTP/1.1 cache won't change the semantics of a request and response; in particular, if you issue an unconditional request you will get a full response (although it may be served to you from the cache, or the cache may make a conditional request on your behalf to the origin). This notion of "semantic transparency" means you should be able to drop a `CachingHttpClient` into an existing application without breaking anything.

Folks that would like to experiment with alternative storage backends should look at the `HttpCacheStorage` interface and the related package documentation there. You may also be interested in the provided `EhCache` and `memcached` storage backends.

Since:
  4.1

Field Summary
`static String` `CACHE_RESPONSE_STATUS` This is the name under which the `CacheResponseStatus` of a request (for example, whether it resulted in a cache hit) will be recorded if an `HttpContext` is provided during execution.

Constructor Summary
`CachingHttpClient()` Constructs a `CachingHttpClient` with default caching settings that stores cache entries in memory and uses a vanilla `DefaultHttpClient` for backend requests.
`CachingHttpClient(CacheConfig config)` Constructs a `CachingHttpClient` with the given caching options that stores cache entries in memory and uses a vanilla `DefaultHttpClient` for backend requests.
`CachingHttpClient(HttpClient client)` Constructs a `CachingHttpClient` with default caching settings that stores cache entries in memory and uses the given `HttpClient` for backend requests.
`CachingHttpClient(HttpClient client, CacheConfig config)` Constructs a `CachingHttpClient` with the given caching options that stores cache entries in memory and uses the given `HttpClient` for backend requests.
`CachingHttpClient(HttpClient client, HttpCacheStorage storage, CacheConfig config)` Constructs a `CachingHttpClient` with the given caching options that stores cache entries in the provided storage backend and uses the given `HttpClient` for backend requests.
`CachingHttpClient(HttpClient client, ResourceFactory resourceFactory, HttpCacheStorage storage, CacheConfig config)` Constructs a `CachingHttpClient` with the given caching options that stores cache entries in the provided storage backend and uses the given `HttpClient` for backend requests.

Method Summary
`HttpResponse` `execute(HttpHost target, HttpRequest request)` Executes a request to the target using the default context.
`HttpResponse` `execute(HttpHost target, HttpRequest request, HttpContext context)` Executes a request to the target using the given context.

`

`<T> T`

`

`execute(HttpHost target, HttpRequest request, ResponseHandler<? extends T> responseHandler)`
Executes a request to the target using the default context and processes the response using the given response handler.

`

`<T> T`

`

`execute(HttpHost target, HttpRequest request, ResponseHandler<? extends T> responseHandler, HttpContext context)`
Executes a request to the target using the given context and processes the response using the given response handler.

`HttpResponse` `execute(HttpUriRequest request)` Executes a request using the default context.
`HttpResponse` `execute(HttpUriRequest request, HttpContext context)` Executes a request using the given context.

`

`<T> T`

`

`execute(HttpUriRequest request, ResponseHandler<? extends T> responseHandler)`
Executes a request using the default context and processes the response using the given response handler.

`

`<T> T`

`

`execute(HttpUriRequest request, ResponseHandler<? extends T> responseHandler, HttpContext context)`
Executes a request using the given context and processes the response using the given response handler.

`long` `getCacheHits()` Reports the number of times that the cache successfully responded to an `HttpRequest` without contacting the origin server.
`long` `getCacheMisses()` Reports the number of times that the cache contacted the origin server because it had no appropriate response cached.
`long` `getCacheUpdates()` Reports the number of times that the cache was able to satisfy a response by revalidating an existing but stale cache entry.
`ClientConnectionManager` `getConnectionManager()` Obtains the connection manager used by this client.
`HttpParams` `getParams()` Obtains the parameters for this client.
`boolean` `isSharedCache()` Reports whether this `CachingHttpClient` is configured as a shared (public) or non-shared (private) cache.
`boolean` `supportsRangeAndContentRangeHeaders()` Reports whether this `CachingHttpClient` implementation supports byte-range requests as specified by the `Range` and `Content-Range` headers.

Methods inherited from class java.lang.Object
`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

Field Detail

### CACHE_RESPONSE_STATUS

    public static final String CACHE_RESPONSE_STATUS

  This is the name under which the `CacheResponseStatus` of a request (for example, whether it resulted in a cache hit) will be recorded if an `HttpContext` is provided during execution.

  See Also:
    Constant Field Values

Constructor Detail

### CachingHttpClient

    public CachingHttpClient()

  Constructs a `CachingHttpClient` with default caching settings that stores cache entries in memory and uses a vanilla `DefaultHttpClient` for backend requests.

### CachingHttpClient

    public CachingHttpClient(CacheConfig config)

  Constructs a `CachingHttpClient` with the given caching options that stores cache entries in memory and uses a vanilla `DefaultHttpClient` for backend requests.

  Parameters:
    `config` - cache module options

### CachingHttpClient

    public CachingHttpClient(HttpClient client)

  Constructs a `CachingHttpClient` with default caching settings that stores cache entries in memory and uses the given `HttpClient` for backend requests.

  Parameters:
    `client` - used to make origin requests

### CachingHttpClient

    public CachingHttpClient(HttpClient client,
                             CacheConfig config)

  Constructs a `CachingHttpClient` with the given caching options that stores cache entries in memory and uses the given `HttpClient` for backend requests.

  Parameters:
    `config` - cache module options
    `client` - used to make origin requests

### CachingHttpClient

    public CachingHttpClient(HttpClient client,
                             ResourceFactory resourceFactory,
                             HttpCacheStorage storage,
                             CacheConfig config)

  Constructs a `CachingHttpClient` with the given caching options that stores cache entries in the provided storage backend and uses the given `HttpClient` for backend requests. However, cached response bodies are managed using the given `ResourceFactory`.

  Parameters:
    `client` - used to make origin requests
    `resourceFactory` - how to manage cached response bodies
    `storage` - where to store cache entries
    `config` - cache module options

### CachingHttpClient

    public CachingHttpClient(HttpClient client,
                             HttpCacheStorage storage,
                             CacheConfig config)

  Constructs a `CachingHttpClient` with the given caching options that stores cache entries in the provided storage backend and uses the given `HttpClient` for backend requests.

  Parameters:
    `client` - used to make origin requests
    `storage` - where to store cache entries
    `config` - cache module options

Method Detail

### getCacheHits

    public long getCacheHits()

  Reports the number of times that the cache successfully responded to an `HttpRequest` without contacting the origin server.

  Returns:
    the number of cache hits

### getCacheMisses

    public long getCacheMisses()

  Reports the number of times that the cache contacted the origin server because it had no appropriate response cached.

  Returns:
    the number of cache misses

### getCacheUpdates

    public long getCacheUpdates()

  Reports the number of times that the cache was able to satisfy a response by revalidating an existing but stale cache entry.

  Returns:
    the number of cache revalidations

### execute

    public HttpResponse execute(HttpHost target,
                                HttpRequest request)
                         throws IOException

  Description copied from interface: `HttpClient`
  Executes a request to the target using the default context.

  Specified by:
    `execute` in interface `HttpClient`
  Parameters:
    `target` - the target host for the request. Implementations may accept `null` if they can still determine a route, for example to a default target or by inspecting the request.
    `request` - the request to execute
  Returns:
    the response to the request. This is always a final response, never an intermediate response with an 1xx status code. Whether redirects or authentication challenges will be returned or handled automatically depends on the implementation and configuration of this client.
  Throws:
    `IOException` - in case of a problem or the connection was aborted
    `ClientProtocolException` - in case of an http protocol error

### execute

    public <T> T execute(HttpHost target,
                         HttpRequest request,
                         ResponseHandler<? extends T> responseHandler)
              throws IOException

  Description copied from interface: `HttpClient`
  Executes a request to the target using the default context and processes the response using the given response handler.

  Specified by:
    `execute` in interface `HttpClient`
  Parameters:
    `target` - the target host for the request. Implementations may accept `null` if they can still determine a route, for example to a default target or by inspecting the request.
    `request` - the request to execute
    `responseHandler` - the response handler
  Returns:
    the response object as generated by the response handler.
  Throws:
    `IOException` - in case of a problem or the connection was aborted
    `ClientProtocolException` - in case of an http protocol error

### execute

    public <T> T execute(HttpHost target,
                         HttpRequest request,
                         ResponseHandler<? extends T> responseHandler,
                         HttpContext context)
              throws IOException

  Description copied from interface: `HttpClient`
  Executes a request to the target using the given context and processes the response using the given response handler.

  Specified by:
    `execute` in interface `HttpClient`
  Parameters:
    `target` - the target host for the request. Implementations may accept `null` if they can still determine a route, for example to a default target or by inspecting the request.
    `request` - the request to execute
    `responseHandler` - the response handler
    `context` - the context to use for the execution, or `null` to use the default context
  Returns:
    the response object as generated by the response handler.
  Throws:
    `IOException` - in case of a problem or the connection was aborted
    `ClientProtocolException` - in case of an http protocol error

### execute

    public HttpResponse execute(HttpUriRequest request)
                         throws IOException

  Description copied from interface: `HttpClient`
  Executes a request using the default context.

  Specified by:
    `execute` in interface `HttpClient`
  Parameters:
    `request` - the request to execute
  Returns:
    the response to the request. This is always a final response, never an intermediate response with an 1xx status code. Whether redirects or authentication challenges will be returned or handled automatically depends on the implementation and configuration of this client.
  Throws:
    `IOException` - in case of a problem or the connection was aborted
    `ClientProtocolException` - in case of an http protocol error

### execute

    public HttpResponse execute(HttpUriRequest request,
                                HttpContext context)
                         throws IOException

  Description copied from interface: `HttpClient`
  Executes a request using the given context. The route to the target will be determined by the HTTP client.

  Specified by:
    `execute` in interface `HttpClient`
  Parameters:
    `request` - the request to execute
    `context` - the context to use for the execution, or `null` to use the default context
  Returns:
    the response to the request. This is always a final response, never an intermediate response with an 1xx status code. Whether redirects or authentication challenges will be returned or handled automatically depends on the implementation and configuration of this client.
  Throws:
    `IOException` - in case of a problem or the connection was aborted
    `ClientProtocolException` - in case of an http protocol error

### execute

    public <T> T execute(HttpUriRequest request,
                         ResponseHandler<? extends T> responseHandler)
              throws IOException

  Description copied from interface: `HttpClient`
  Executes a request using the default context and processes the response using the given response handler.

  Specified by:
    `execute` in interface `HttpClient`
  Parameters:
    `request` - the request to execute
    `responseHandler` - the response handler
  Returns:
    the response object as generated by the response handler.
  Throws:
    `IOException` - in case of a problem or the connection was aborted
    `ClientProtocolException` - in case of an http protocol error

### execute

    public <T> T execute(HttpUriRequest request,
                         ResponseHandler<? extends T> responseHandler,
                         HttpContext context)
              throws IOException

  Description copied from interface: `HttpClient`
  Executes a request using the given context and processes the response using the given response handler.

  Specified by:
    `execute` in interface `HttpClient`
  Parameters:
    `request` - the request to execute
    `responseHandler` - the response handler
  Returns:
    the response object as generated by the response handler.
  Throws:
    `IOException` - in case of a problem or the connection was aborted
    `ClientProtocolException` - in case of an http protocol error

### getConnectionManager

    public ClientConnectionManager getConnectionManager()

  Description copied from interface: `HttpClient`
  Obtains the connection manager used by this client.

  Specified by:
    `getConnectionManager` in interface `HttpClient`
  Returns:
    the connection manager

### getParams

    public HttpParams getParams()

  Description copied from interface: `HttpClient`
  Obtains the parameters for this client. These parameters will become defaults for all requests being executed with this client, and for the parameters of dependent objects in this client.

  Specified by:
    `getParams` in interface `HttpClient`
  Returns:
    the default parameters

### execute

    public HttpResponse execute(HttpHost target,
                                HttpRequest request,
                                HttpContext context)
                         throws IOException

  Description copied from interface: `HttpClient`
  Executes a request to the target using the given context.

  Specified by:
    `execute` in interface `HttpClient`
  Parameters:
    `target` - the target host for the request. Implementations may accept `null` if they can still determine a route, for example to a default target or by inspecting the request.
    `request` - the request to execute
    `context` - the context to use for the execution, or `null` to use the default context
  Returns:
    the response to the request. This is always a final response, never an intermediate response with an 1xx status code. Whether redirects or authentication challenges will be returned or handled automatically depends on the implementation and configuration of this client.
  Throws:
    `IOException` - in case of a problem or the connection was aborted
    `ClientProtocolException` - in case of an http protocol error

### supportsRangeAndContentRangeHeaders

    public boolean supportsRangeAndContentRangeHeaders()

  Reports whether this `CachingHttpClient` implementation supports byte-range requests as specified by the `Range` and `Content-Range` headers.

  Returns:
    `true` if byte-range requests are supported

### isSharedCache

    public boolean isSharedCache()

  Reports whether this `CachingHttpClient` is configured as a shared (public) or non-shared (private) cache. See `CacheConfig.setSharedCache(boolean)`.

  Returns:
    `true` if we are behaving as a shared (public) cache

Copyright © 1999-2012 The Apache Software Foundation. All Rights Reserved.