You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@hc.apache.org by "Joe Campbell (Commented) (JIRA)" <ji...@apache.org> on 2012/02/22 14:19:49 UTC

[jira] [Commented] (HTTPCLIENT-1163) Incorrect processing of Vary: HTTP header of cacheable server response

    [ https://issues.apache.org/jira/browse/HTTPCLIENT-1163?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13213601#comment-13213601 ] 

Joe Campbell commented on HTTPCLIENT-1163:
------------------------------------------

Manish, 
    I am not currently seeing the results that you are with the version that is in trunk.  The following test located in TestBasicHttpCache:testGetVariantCacheEntriesReturnsAllVariants() I think disproves what you are observing.  When I look at the state of the cache - its keys and the variants produced using this test I see A cache that has three entries:

{Accept-Encoding=identity}http://foo.example.com:80/bar=[request date=Wed Feb 22 08:11:22 EST 2012; response date=Wed Feb 22 08:11:22 EST 2012; statusLine=HTTP/1.1 200 OK]

http://foo.example.com:80/bar=[request date=Wed Feb 22 08:11:22 EST 2012; response date=Wed Feb 22 08:11:22 EST 2012; statusLine=HTTP/1.1 200 OK]

{Accept-Encoding=gzip}http://foo.example.com:80/bar=[request date=Wed Feb 22 08:11:22 EST 2012; response date=Wed Feb 22 08:11:22 EST 2012; statusLine=HTTP/1.1 200 OK]

The entry in the middle contains the pointers to the other two variant and when I ask the entry for its variants I get the one for identity and the one for gzip.  Can you create a junit test case that shows the error that you are describing in more detail?
                
> Incorrect processing of Vary: HTTP header of cacheable server response
> ----------------------------------------------------------------------
>
>                 Key: HTTPCLIENT-1163
>                 URL: https://issues.apache.org/jira/browse/HTTPCLIENT-1163
>             Project: HttpComponents HttpClient
>          Issue Type: Bug
>          Components: Cache
>    Affects Versions: Snapshot
>            Reporter: Manish Tripathi
>            Assignee: Jon Moore
>              Labels: patch
>
> Vary header from the server's response is not processed correctly by the cache when prepending the list of variables to the URL.
> Example (unrelated headers removed from the requests/responses for clarity).
> -> client sends:
> GET http://s.ytimg.com/yt/cssbin/www-guide-vflgAVfxE.css HTTP/1.1
> Accept-Encoding: gzip, deflate
> Host: s.ytimg.com
> -> server responds:
> HTTP/1.1 200 OK
> Vary: Accept-Encoding
> Current implementation produces the following variant URI to be stored in the cache:
> {Accept-Encoding=}http://s.ytimg.com/yt/cssbin/www-guide-vflgAVfxE.css
> Notice how the actual value of Accept-Encoding header from the original request is NOT prepended. 
> The correct variant URI should be:
> {Accept-Encoding=gzip%2Cdeflate}http://s.ytimg.com/yt/cssbin/www-guide-vflgAVfxE.css
> The cause of the problem: org.apache.http.impl.client.cache.CachingHttpClient.java, method callBackend(..)
> uses the original version of HttpRequest without headers added by DefaultHttpClient and/or ContentEncodingHttpClient implementation. 
> Proposed fix:
> Replace the following lines of org.apache.http.impl.client.cache.CachingHttpClient.java:
>         HttpResponse backendResponse = backend.execute(target, request, context);
>         backendResponse.addHeader("Via", generateViaHeader(backendResponse));
>         return handleBackendResponse(target, request, requestDate, getCurrentDate(),
>                 backendResponse);
> with the lines:
>         if (context==null) context=new BasicHttpContext();
>         HttpResponse backendResponse = backend.execute(target, request, context);
>         backendResponse.addHeader("Via", generateViaHeader(backendResponse));
>         HttpRequest actualRequest=(HttpRequest)context.getAttribute(ExecutionContext.HTTP_REQUEST);
>         return handleBackendResponse(target, actualRequest, requestDate, getCurrentDate(),
>                 backendResponse);
> After the corrections above, further experiments show that variant cache entries are still not being processed correctly. In the example above, the cache entry will be stored with the key "{Accept-Encoding=gzip%2Cdeflate}http://s.ytimg.com/yt/cssbin/www-guide-vflgAVfxE.css", but lookups will be performed using the key "http://s.ytimg.com/yt/cssbin/www-guide-vflgAVfxE.css", because obviously the client does not know that this particular cache entry has variants at the time of request.
> So maybe the correct fix would be to remove this "{Accept-Encoding=gzip%2Cdeflate}" prefix from the key completely when storing it in the cache?

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@hc.apache.org
For additional commands, e-mail: dev-help@hc.apache.org