RE: Multiple Range headers in an HTTP request

My understanding is that Get(byteRange) support is inconsistently implemented in deployed "HTTP 1.1" servers (as you verify), so there was some consideration to expand compatibility by simplifying requests to broadly supported syntax (lowest common denominator, to put a negative spin on it).

There are other design factors such as maximizing the caching efficiency of CDNs (Content Delivery Networks) as they exist today with edge nodes distributed around the planet for hop reduction, load balancing (when it's night in Dublin, the packets go to New York, when it's early they go to Europe, until Dubai takes over, etc.), local data laws, tax codes, etc.  It has some of the characteristics of P2P network protocols, except a B to B managed service in the cloud; not C to C peers.  

Once simple requests float from the origin servers to the edge of the network, they'll be efficiently served for the highest demand content with high local cache hit rates. Complex range requests can't be cached as efficiently.

Mass distribution of high def video is asking a couple orders of magnitude more from the Internet, so backbone load efficiency is an important protocol consideration that effects QOS for the whole system, including YOUR email, not just MY video stream.

Kilroy Hughes

-----Original Message-----
From: Raphaël Troncy [mailto:Raphael.Troncy@cwi.nl] 
Sent: Thursday, September 10, 2009 5:37 AM
To: Philip Jägenstedt
Cc: Media Fragment; Yves Lafon; Kilroy Hughes
Subject: Re: Multiple Range headers in an HTTP request

Hi Philip

> I don't know what the specs say, but I did a little experiment with nc 
> (netcat):

Thanks for the tests! During a previous chat with Yves, he told me that 
it is fine w.r.t. the spec to have multiple Range headers, and indeed, 
the answer should be a mime multipart. However, it is a pain to 
implement :-( It is also fine to have multiple Range headers in 
different units, but until now, there is only one unit (bytes) 
implemented :-)

Regarding your tests:

> A:
> Range: bytes=0-99
> 
> B:
> Range: bytes=0-99
> Range: bytes=100-199
> 
> C:
> Range: bytes=0-99
> Range: seconds=10-20
> 
> D:
> Range: seconds=10-20
> Range: bytes=0-99
> 
> Apache 2.2:
> A: Content-Range: bytes 0-99
> B: Content-Range: bytes 0-99 (multipart)

Shouldn't be:
B: Content-Range: bytes 0-199 (multipart) ?

> C: Content-Range: bytes 0-99 (multipart)
> D: 200 OK (full resource)

D is interesting. If Apache does not understand the first Range header, 
then it ignores the following ones?

> IIS 5.0:
> A: Content-Range: bytes 0-99
> B: 200 OK (full resource)
> C: 200 OK (full resource)
> D: 200 OK (full resource)

I'm not really surprised of the IIS 5.0 behavior.
Kilroy, since you're listening to this list, would you like to comment 
on this test? Is it purposely that IIS does not implement the case where 
a HTTP request contains multiple Range headers?
Cheers.

   Raphaël

-- 
Raphaël Troncy
EURECOM, Multimedia Communications Department
2229, route des Crêtes, 06560 Sophia Antipolis, France.
e-mail: raphael.troncy@eurecom.fr & raphael.troncy@gmail.com
Tel: +33 (0)4 - 9300 8242
Fax: +33 (0)4 - 9000 8200
Web: http://www.cwi.nl/~troncy/

Received on Thursday, 10 September 2009 12:30:34 UTC