Hi Adam,

This is related to the way the caching module handles cache variants. In this 
case I suspect the origin is (correctly) setting Vary: Accept-Encoding.

There are two cache entries here; however only one of them should have the 
response body present, IIRC. The version without the prepended request headers 
is treated as the "parent" entry and the one with the headers is the actual 
cached variant.

This structure is in place because certain requests that pass through the cache 
are required to invalidate all the variants for that URL, so we need someplace 
to tie those together. It doubles the header space used but not double the 
response body space. As there are more variants the overhead for the duplicated 
headers drops further.

Now, because you are seeing {Accept-Encoding=} this indicates that when the 
cache saw the request come through it did not have the Accept-Encoding: gzip on 
it at that point. I think this means you have the DecompressingHttpClient and 
CachingHttpClient wired up backwards.

You want the CachingHttpClient as close to the final DefaultHttpClient as 
possible. So these should be layered as:

DecompressingHttpClient -> CachingHttpClient -> DefaultHttpClient

One of the updates in the 4.3 release will take more care of this wiring for 
you out of the box.

Jon
........
Jon Moore


On Apr 11, 2013, at 2:20 PM, "Adam Patacchiola" <[email protected]> wrote:

> I have done some more research on this and it appears that the caching is
> working, however it is adding 2 entries to the backing cache: one each with
> and without the url pre-pended by {Accept-Encoding=}. This results in a
> cache miss for the get with the pre-pended url, and uses double the storage
> space in whatever mechanism you are backing the client with. There was a
> bug in my backing store which led to me initially believing it was not
> caching the (correct) url.
> 
> tl;dr it is caching but adding a duplicate invalid entry that never gets
> hit.
> 
> 
> 
> 
> 
> 
> On Thu, Apr 11, 2013 at 10:13 AM, Adam Patacchiola <[email protected]> wrote:
> 
>> I'm using 4.2.3 with gzip compression and CachingHttpClient. Initially I
>> implemented the custom request/response interceptors as described here:
>> https://hc.apache.org/httpcomponents-client-ga/httpclient/examples/org/apache/http/examples/client/ClientGZipContentCompression.java
>>  which
>> did not work, resulting in the issue described here:
>> https://issues.apache.org/jira/browse/HTTPCLIENT-1163.
>> 
>> 
>> 
>> It appeared to me from reading this issue that using the
>> "CompressionDecorator" would resolve the issue so I modified my code to use
>> DecompressingHttpClient (
>> https://hc.apache.org/httpcomponents-client-ga/httpclient/apidocs/org/apache/http/impl/client/DecompressingHttpClient.html)
>> but the issue still persists as we can see from the below log output. It is
>> caching using one (broken?) key but then looking it up using a different
>> (correct?) key which is consistent with the bug above:
>> 
>> 04-11 09:32:54.760: ... putting cache entry, url: {Accept-Encoding=}
>> https://www.surespot.me:8080/images/b:f1/165
>> 04-11 09:32:55.965: ... Cache miss [host: https://www.surespot.me:8080;
>> uri: https://www.surespot.me:8080/images/b:f1/165]
>> 
>> Am I missing something or is this still broken?
>> 
>> Thanks,
>> 
>> Adam
>> 

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to