503 backend error after backends reponds with 204 without a body

Wido den Hollander wido at widodh.nl
Tue Oct 6 20:29:46 CEST 2015


I've upgraded to Varnish 4.1.0 today on a system where there is Ceph's
RADOS Gateway [0] running with the embedded Civetweb [1] webserver.

When a client sends a DELETE command the backend responds with a HTTP
204 without a body, but this causes Varnish to throw a 503 backend error.

-6- BerespProtocol HTTP/1.1
-6- BerespStatus   204
-6- BerespReason   No Content
-6- BerespHeader   Bucket: "widodh"
-6- BerespHeader   Content-type: application/xml
-6- BerespHeader   Content-Length: 0
-6- BerespHeader   Date: Tue, 06 Oct 2015 18:23:07 GMT

And Varnish then says:

-6- Error          Body cannot be fetched
-6- Timestamp      Error: 1444155787.622126 0.175832 0.000177
-6- BerespProtocol HTTP/1.1
-6- BerespStatus   503
-6- BerespReason   Service Unavailable
-6- BerespReason   Backend fetch failed
-6- BerespHeader   Date: Tue, 06 Oct 2015 18:23:07 GMT
-6- BerespHeader   Server: Varnish
-6- VCL_call       BACKEND_ERROR

Reading the HTTP specification [2] I found this:

"The 204 response MUST NOT include a message-body, and thus is always
terminated by the first empty line after the header fields."

I can probably catch this in vcl_backend_response, pass to vcl_synth and
come up with a proper response to the client, but is that the way to go?

Is this a bug in Varnish or is it keeping to the RFCs?



[0]: http://docs.ceph.com/docs/master/radosgw/
[1]: https://github.com/civetweb/civetweb
[2]: http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html

More information about the varnish-misc mailing list