Q:

Can somebody explain this piece of VCL sub_recv on Varnish 3.x?

I've been looking into some examples of VCL files for Varnish 3.x and I stumbled upon this piece already some times, and it's been making me scratch my head:
sub vcl_recv {

...

  if (req.request != "GET" &&
      req.request != "HEAD" &&
      req.request != "PUT" &&
      req.request != "POST" &&
      req.request != "TRACE" &&
      req.request != "OPTIONS" &&
      req.request != "DELETE") {
    return (pipe);
  }

...
}

Basically, I don't see what would be the point on piping to the backend unknown requests? Is this just in case some weird web app/protocol so it'd work? 
Why is it better to pipe this request than to 'pass' them?
I'd love if somebody could explain the usecase for this piece.

A:

The pass instruction makes Varnish act like a classic layer 7 reverse proxy, forwarding traffic by reading and replaying each request one by one.
The pipe instruction makes Varnish act like a HTTP CONNECT proxy, streaming traffic byte-by-byte to and from the backend server.
If the request method is not known, Varnish might not know how to interpret and handle each request, in which case you might want to not touch it at all, thus the VCL examples you see.
WebSocket is a great example (from the docs):
sub vcl_pipe {
     if (req.http.upgrade) {
         set bereq.http.upgrade = req.http.upgrade;
     }
}
sub vcl_recv {
     if (req.http.Upgrade ~ "(?i)websocket") {
         return (pipe);
     }
}

vcl_pipe is called at the start of the transmission and ensures that the backend server receives the HTTP Upgrade header instruction and switches to WebSocket before continuing.

