[Cosmo-dev] Bug 9715

Matthew Eernisse mde at osafoundation.org
Wed Oct 17 14:57:20 PDT 2007


The only question I'd have regarding r5971 is whether it will now cause 
problems in IE -- which is what the query-string hack was originally 
there for, IIRC.

I'm fuzzy on details, but I do see the specific IE-test there in the 
conditional:

if (dojo.render.html.ie || 
cosmo.ui.conf.getBooleanValue("preventDataCaching")) { ...

Bug 9715 and its fix are Firefox-specific, right?


Matthew


Travis Vachon wrote:
> Ok, I imp'd and tested this last yesterday, but waited until this 
> morning for more input to commit. Since I heard a +1 and no negative 
> input, I've committed the fix in r5970 and r5971. Review from Brian and 
> Matthew would be appreaciated!
> 
> -Travis
> 
> On Oct 16, 2007, at 5:08 PM, Travis Vachon wrote:
> 
>> Good news everyone!
>>
>> After digging through the HTTP caching spec a bit 
>> (http://www.w3.org/Protocols/rfc2616/rfc2616-sec13.html#sec13) I think 
>> that Firefox is actually behaving correctly in most of the cases where 
>> we're seeing bug 9715. From the spec:
>>
>> "The goal of caching in HTTP/1.1 is to eliminate the need to send 
>> requests in many cases, and to eliminate the need to send full 
>> responses in many other cases."
>>
>> The problem we're having is that Firefox is deciding that it does not 
>> need to send a request to get calendar and dashboard data in many cases.
>>
>> More spec:
>>
>>
>>
>> 13.1.1 Cache Correctness
>>
>> A correct cache MUST respond to a request with the most up-to-date 
>> response held by the cache that is appropriate to the request (see 
>> sections 13.2.5, 13.2.6, and 13.12) which meets one of the following 
>> conditions:
>>
>> ...
>>
>>       2. It is "fresh enough" (see section 13.2). In the default case,
>>          this means it meets the least restrictive freshness requirement
>>          of the client, origin server, and cache (see section 14.9); if
>>          the origin server so specifies, it is the freshness requirement
>>          of the origin server alone.
>> ...
>>
>>
>> 13.2 Expiration Model
>> 13.2.1 Server-Specified Expiration
>>
>> HTTP caching works best when caches can entirely avoid making requests 
>> to the origin server.
>>
>> ...
>>
>> 13.2.2 Heuristic Expiration
>>
>> Since origin servers do not always provide explicit expiration times, 
>> HTTP caches typically assign heuristic expiration times, employing 
>> algorithms that use other header values (such as the Last-Modified 
>> time) to estimate a plausible expiration time. The HTTP/1.1 
>> specification does not provide specific algorithms, but does impose 
>> worst-case constraints on their results.
>>
>>
>>
>>
>> So our problem is - you guessed it! - that we're not specifying an 
>> expiration date for our Atom data. As a result, Firefox uses several 
>> other headers to take a guess at when the data is no longer fresh. 
>> Given the nature of our application I'd like to propose that we want 
>> data to expire immediately, forcing the client to revalidate with the 
>> server any time it wants to get data. This doesn't mean we're throwing 
>> away caching completely, it just means the server must return a 304 to 
>> use cached data.
>>
>> Since this is a little confusing I'll give a couple examples based on 
>> some testing from this morning:
>>
>> 1) I have a collection with uid abcd containing two events "foo" and 
>> "bar". I first fetch the collection:
>>
>> GET /atom/collection/abcd/full/eim-json
>>
>> Now I delete event "foo":
>>
>> DELETE /atom/item/foo-uid
>>
>> Now I look at the data in another view and then switch back to the 
>> original view:
>>
>> GET /atom/collection/abcd/full/eim-json
>>
>> Since we didn't specify an expiration date for the collection data the 
>> browser uses its heuristic to decide that the data in its cache is 
>> fresh and doesn't even bother going back to the server for it. Since 
>> foo was in the original request, foo will be in this request as well.
>>
>>
>>
>> 2) I have a collection with uid efgh containing one event "bar". I 
>> first fetch the collection:
>>
>> GET /atom/collection/efgh/full/eim-json
>>
>> Now I add a new event "foo":
>>
>> POST /atom/collection/efgh/full/eim-json
>>
>> <data for "foo">
>>
>>
>> Finally I refetch the data for efgh:
>>
>> GET /atom/collection/efgh/full/eim-json
>>
>> This time according the HTTP spec the collection data should be 
>> invalidated. However, because of the issue mentioned in bug  9715 
>> comment 7 it is not. Fortunately, some testing has indicated that the 
>> caching settings I'm proposing also make this a non-issue, as Firefox 
>> appears to respect the appropriate part of the spec in this regard.
>>
>> Given the priority of this bug I'm going to start working on a 
>> solution in this vein but I'll be sure to call out my commit to the 
>> appropriate parties for review.
>>
>> Comments and questions welcome!
>>
>> -Travis
>>
>> _______________________________________________
>> cosmo-dev mailing list
>> cosmo-dev at lists.osafoundation.org
>> http://lists.osafoundation.org/mailman/listinfo/cosmo-dev
> 
> _______________________________________________
> cosmo-dev mailing list
> cosmo-dev at lists.osafoundation.org
> http://lists.osafoundation.org/mailman/listinfo/cosmo-dev
> 



More information about the cosmo-dev mailing list