On 05/18/2007 11:26 PM, Justin Erenkrantz wrote:
> On 5/18/07, Ruediger Pluem <[EMAIL PROTECTED]> wrote:
> 
>> > Well, because rv == !OK, wouldn't the CACHE_REMOVE_URL filter hit?
>> > That should do the dirty deed, no?  -- justin
>>
>> No, as the CACHE_REMOVE_URL filter will only work if there is a
>> cache->handle or a cache->stale_handle. We have neither, as
>> cache->stale_handle
>> is set to NULL in the case that the cached entity is *really* stale
>> and we do
>> not create a new entity (and thus a cache->handle) in the HEAD case.
> 
> 
> Well, let's not clear cache->stale_handle then.  How does the
> following look?  -- justin

Good :-). Thanks.

> 
> Index: modules/cache/mod_cache.c
> ===================================================================
> --- modules/cache/mod_cache.c    (revision 539607)
> +++ modules/cache/mod_cache.c    (working copy)
> @@ -477,8 +477,10 @@
>         reason = "No Last-Modified, Etag, or Expires headers";
>     }
>     else if (r->header_only) {
> -        /* HEAD requests */
> -        reason = "HTTP HEAD request";
> +        /* Forbid HEAD requests unless we have it cached already */
> +        if (!cache->stale_handle) {
> +            reason = "HTTP HEAD request";
> +        }
>     }
>     else if (!conf->store_nostore &&
>              ap_cache_liststr(NULL, cc_out, "no-store", NULL)) {

Is this correct? In the case that we have a HEAD request on a stale cached
entity we would ignore any of the following conditions like
Cache-Control: nostore, Cache-Control: private, an Authorization header in the
request, Vary *, or r->no_cache being set and update the headers of the
entity with the contents of the HEAD response. This sounds wrong to me.
Why not using

(r->header_only && !cache->stale_handle)

instead?

Regards

RĂ¼diger

Reply via email to