[Varnish] #1500: Possible bug in 4.0.0 with Range+do_stream=true

Varnish varnish-bugs at varnish-cache.org
Mon May 12 09:15:48 CEST 2014

#1500: Possible bug in 4.0.0 with Range+do_stream=true
 Reporter:  moseleymark  |       Owner:
     Type:  defect       |      Status:  new
 Priority:  normal       |   Milestone:
Component:  build        |     Version:  4.0.0
 Severity:  normal       |  Resolution:
 Keywords:               |

Comment (by phk):

 I was sort of vaguely aware of this, and left the code as is for lack of
 any better ideas.

 The basic problem is that a ranged response must commit to how many bytes
 it will send in the Content-Range response header.

 You report is on the low end of the range, but it's even more icky for an
 object with an unbounded upper end.

 Say you ask for the range "200-".  At the time we process the Range
 header, we have received 5k of the 1M object, so even if the low end
 clears fine, the high end truncates to 5k, returning you a response you
 can most likely not use.

 The only solid & correct way to work around this issue, would be to
 postpone the response until we have seen enough of the object from the
 backend to know how we can satisfy both ends of the range request, but
 that seems counter productive from a response-time point of view, as we'd
 have to wait for the full 1M object before starting to respond from byte
 200 onwards.

 A more heuristic handling would reply optimistically to the range request,
 setting Content-Range based on the range request, and fail the client
 connection if that optimism was unfounded.  That of course only works for
 range requests with a finite end.

 So all in all, I don't see any solutions significantly better than the
 present one.

 One possible workaround, would be a VMOD.std function you could call in
 vcl_response{} which looks for a range request and waits for the streaming
 from the backend until that range request can be properly processed.

 More when we have talked about this ticket at todays bugwash.

Ticket URL: <https://www.varnish-cache.org/trac/ticket/1500#comment:1>
Varnish <https://varnish-cache.org/>
The Varnish HTTP Accelerator

More information about the varnish-bugs mailing list