You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@hc.apache.org by "Jon Moore (JIRA)" <ji...@apache.org> on 2013/10/08 12:13:42 UTC
[jira] [Resolved] (HTTPCLIENT-1415) Cached entry is not flushed
when a response contains a content-location header without an ETag header
field
[ https://issues.apache.org/jira/browse/HTTPCLIENT-1415?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Jon Moore resolved HTTPCLIENT-1415.
-----------------------------------
Resolution: Duplicate
> Cached entry is not flushed when a response contains a content-location header without an ETag header field
> -----------------------------------------------------------------------------------------------------------
>
> Key: HTTPCLIENT-1415
> URL: https://issues.apache.org/jira/browse/HTTPCLIENT-1415
> Project: HttpComponents HttpClient
> Issue Type: Improvement
> Components: HttpCache
> Affects Versions: 4.3.1
> Environment: Windows 7, Tomcat
> Reporter: kyle leonhard
> Fix For: 4.3.2
>
> Attachments: CacheInvalidator.java.patch
>
>
> When a response returns a content-location header, flushLocationCacheEntry is invoked on the content-location's URL. flushLocationCacheEntry causes the cached entry to be flushed if the entry is older than the response and the etags differ.
> However, the response and entry ETags are not considered different if either ETag header values are null(see:CacheInvalidator.responseAndEntryEtagsDiffer). This causes the resource referenced by the response's content-location header to remain cached.
> I'm not familiar with the HTTP spec, but the responseAndEntryEtagsDiffer, ETag null checks seem iffy.
> The same problem effects 4.2.5 as well.
> **Relevant code
> ***From CacheInvalidator.flushInvalidatedCacheEntries:
> final URL contentLocation = getContentLocationURL(reqURL, response);
> if (contentLocation != null) {
> flushLocationCacheEntry(reqURL, response, contentLocation);
> }
> ***From CacheInvalidator.flushLocationCacheEntry
> if (responseDateOlderThanEntryDate(response, entry)) {
> return;
> }
> if (!responseAndEntryEtagsDiffer(response, entry)) {
> return;
> }
> ***From CacheInvalidator.responseAndEntryEtagsDiffer:
> if (entryEtag == null || responseEtag == null) {
> return false;
> }
--
This message was sent by Atlassian JIRA
(v6.1#6144)
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@hc.apache.org
For additional commands, e-mail: dev-help@hc.apache.org