title: Difference Between Varnish `(pipe)` and `(pass)`
body: <p>I'm working with a <a href="https://github.com/nexcess/magento-turpentine/blob/master/app/code/community/Nexcessnet/Turpentine/misc/version-3.vcl" rel="nofollow noreferrer">varnish configuration I didn't write</a>, and this configuration seems to use <code>(pass)</code> and <code>(pipe)</code> interchangeably.  I'm a little unclear on what, exactly, the difference between these two actions is.</p>
  <p>The manual section on <code>(pipe)</code> is a little cryptic to me</p>
  <blockquote>
  <p>Pipe can be returned from vcl_recv as well. Pipe short circuits the client and the backend connections and Varnish will just sit there and shuffle bytes back and forth. Varnish will not look at the data being send back and forth - so your logs will be incomplete. Beware that with HTTP 1.1 a client can send several requests on the same connection and so you should instruct Varnish to add a &quot;Connection: close&quot; header before actually returning pipe.</p>
  </blockquote>
  <p>I'm not sure what client they're talking about when they say &quot;short circuit&quot;, or what short circuit means in this context, or how varnish shuffling bytes back and forth is different from its normal behavior.  i.e. this description is probably great for someone who understands varnish's implementation, but it's a little confusing to someone (me) who understands varnish's role as &quot;pull the results for this HTTP request from memory, or pull the results for this HTTP requests from the application&quot;.</p>
  <p>So, given that context, what exactly is <code>(pipe)</code> doing that's different from <code>(pass)</code>?</p>
  <p>(specific backend application I'm working with is Magento, a PHP based ecommerce app, if that matters (<code>mod_php</code>, FastCGI, etc.)</p>