I tried varnishd (varnish-2.1.2 SVN 4769:4772) on Gentoo Linux today. And the VCL compilation failed:<div><div><br></div><div><div>Message from VCC-compiler:</div><div>Variable &#39;obj.http.X-Cache-Only&#39; not accessible in method &#39;vcl_fetch&#39;.</div>
<div>At: (input Line 106 Pos 21)</div><div>                set obj.http.X-Cache-Only = &quot;true&quot;;</div><div>--------------------#####################----------</div><div>Running VCC-compiler failed, exit 1</div><div>
VCL compilation failed</div><div><br></div><div>I also tried </div><div><div>set resp.http.X-Cache-Only = &quot;true&quot;;</div></div><div>but still failed.</div><div><br></div><div>:(</div><div><br></div><div>pahud</div>
<div><br></div><br><div class="gmail_quote">On Mon, Jul 5, 2010 at 10:49 PM, Pahud <span dir="ltr">&lt;<a href="mailto:pahudnet@gmail.com">pahudnet@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
Thanks for your quick reply. I tried your config and varnish started with no error but if I send http request in this case, varnish will have empty response. And if I comment off the vcl_deliver it responds as normal.  Can you help me a little bit more? Thanks again.<div>

<br></div><div><font color="#888888">pahud</font><div><div></div><div class="h5"><br><div><br></div><div><br><div><br></div><div><br><div><div><br><div class="gmail_quote">On Mon, Jul 5, 2010 at 10:11 PM, Kristian Lyngstøl <span dir="ltr">&lt;<a href="mailto:kristian@varnish-software.com" target="_blank">kristian@varnish-software.com</a>&gt;</span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div>On Mon, Jul 5, 2010 at 3:17 PM, Pahud &lt;<a href="mailto:pahudnet@gmail.com" target="_blank">pahudnet@gmail.com</a>&gt; wrote:<br>


&gt; vcl_deliver(). So I tried this configuration<br>
&gt; sub vcl_deliver {<br>
&gt;          if (req.http.Cache-Control ~ &quot;just-cache&quot;) {<br>
&gt;                error 200 &quot;Cached&quot;;<br>
&gt;                return (pass);<br>
<br>
</div>return (pass); doesn&#39;t work from vcl_deliver, nor is it needed after<br>
an error-statement.<br>
<div><br>
&gt;          }<br>
&gt;     return (deliver);<br>
&gt; }<br>
&gt; But no good luck. I guess vcl_deliver just can&#39;t get the value of<br>
&gt;  req.http.Cache-Control.<br>
&gt; Is it still possible to achieve this just with VCL?<br>
<br>
</div>Hmm. What you could do is:<br>
<br>
In vcl_fetch: if (req.http.Cache-Control ~ &quot;just-cache&quot;) { set<br>
obj.http.X-Cache-Only = &quot;true&quot;; }<br>
In vcl_deliver:<br>
<br>
if (resp.http.X-Cache-Only == &quot;true&quot;) {<br>
    if (obj.hits == 0) {<br>
        error 795 &quot;Cached&quot;;<br>
    } else {<br>
        remove resp.http.X-Cache-Only;<br>
    }<br>
}<br>
<br>
I used the error code 795 to differentiate from 200, so you can catch<br>
it in vcl_error and strip most of the content of the error message if<br>
you want to. You may use whatever error code you want, of course.<br>
<br>
(I haven&#39;t tested this, but I don&#39;t see why it shouldn&#39;t work, except<br>
perhaps syntax typos).<br>
<font color="#888888"><br>
- Kristian<br>
</font></blockquote></div><br></div></div></div></div></div></div></div>
</blockquote></div><br></div></div>