hc-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Campbell, Joseph" <Joseph_Campb...@Comcast.com>
Subject Re: [jira] Created: (HTTPCLIENT-990) CachingHttpClient does not return from cache responses having only the public cache-control directive
Date Wed, 08 Sep 2010 12:35:42 GMT
Vianney,
     If you make that change and then run the unit tests you should be able to know if there
are any side effects.  The cache client has unit tests for http1.1 protocol compliance and
any effects of your code change should immediately be apparent.

Joe

-- 
If the user can't find it, the feature is not there.
        -- Jeff Atwood

----- Original Message -----
From: Vianney Carel (JIRA) [mailto:jira@apache.org]
Sent: Wednesday, September 08, 2010 08:21 AM
To: dev@hc.apache.org <dev@hc.apache.org>
Subject: [jira] Created: (HTTPCLIENT-990) CachingHttpClient does not return from cache responses
having only the public cache-control directive

CachingHttpClient does not return from cache responses having only the public cache-control
directive
-----------------------------------------------------------------------------------------------------

                 Key: HTTPCLIENT-990
                 URL: https://issues.apache.org/jira/browse/HTTPCLIENT-990
             Project: HttpComponents HttpClient
          Issue Type: Bug
          Components: Cache
    Affects Versions: 4.1 Alpha2
            Reporter: Vianney Carel
            Priority: Minor


I noticed that the CachingHttpClient behaves strangely when it receives responses with only
the public cache-control directive, e.g.:

HTTP/1.0 200 OK
Server: My test server
Cache-control: public
Content-Length: 1

1


Using a debugger, I could see that the response is cached. But when the response is queried
from the cache, it is not considered as "fresh".
According to the HTTP RFC, such responses "may" be cached (I understand it as a "should" in
our case)... but there's no reason to put responses in the cache if we don't use them later
one.

The "freshness of the response is analysed after the response is queried from the cache, thanks
to:
CachedResponseSuitabilityChecker#canCachedResponseBeUsed()
... calling CacheEntry#isResponseFresh()
... returning true if the response date (getCurrentAgeSecs()) is lower than its use-by date
(getFreshnessLifetimeSecs())

The issue is that getFreshnessLifetimeSecs() returns 0 when there is no max-age directive.

This could be fixed by replacing the code of CacheEntry#isResponseFresh() by:
    public boolean isResponseFresh() {
        final long freshnessLifetime = getFreshnessLifetimeSecs();
        if (freshnessLifetime == 0) {
            return true;
        }
        return (getCurrentAgeSecs() < getFreshnessLifetimeSecs());
    }

But i'm not 100% confident about not producing some bad side-effects...

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


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


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


Mime
View raw message