On 2/03/2012 12:09 p.m., Zhu, Shan wrote:
Thanks Alex and Amos for your quick response.

Including the range request for cache key calculation sounds more generic than 
hacking the range into the object file names. I am moving toward this 
direction. However there may be an ambiguity problem.

Suppose we have Squid to be able to cache store the range, we may very likely 
have the following two contents cached, for example, if we get multiple HTTP 
requests with and without range requests.
1. A whole object file
2. A range of the object file

Now if we receive another HTTP request with the same range of the same object 
file, we need to decide whether to respond with stored content 2 or to respond 
with the range from stored content 1, as 1 contains 2.

I haven't found a good clue to solve this problem. Any idea?

When you consider (1) as being just another range (the whole length) and treat it same as any partial, this problem disappears. The cached object invalidation rules apply exactly as if the server had sent If-Range in its Vary: header.

Your testing results should show:
If (1) is finished receiving first (2) should have been a HIT on that and any late finishing (2) needs to be invalidated/dropped on completion.

  If (2) arrived first, (1) needs to invalidate/drop that copy of (2).

If (1) and (2) are alternate variants on some other header (eg gzip vs non-gzip), then a following fetch must match one or other regardless of range before it can be used. Marking the whole as just another variant on range makes this easy.

Amos

Reply via email to