trAvis - MANAGER
Edit File: changes-5.1.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Changes in Varnish 5.1 — Varnish version 5.2.1 documentation</title> <link rel="stylesheet" href="../_static/classic.css" type="text/css" /> <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '../', VERSION: '5.2.1', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true }; </script> <script type="text/javascript" src="../_static/jquery.js"></script> <script type="text/javascript" src="../_static/underscore.js"></script> <script type="text/javascript" src="../_static/doctools.js"></script> <link rel="index" title="Index" href="../genindex.html" /> <link rel="search" title="Search" href="../search.html" /> <link rel="top" title="Varnish version 5.2.1 documentation" href="../index.html" /> <link rel="up" title="What's new / Upgrading" href="index.html" /> <link rel="next" title="Upgrading to Varnish 5.1" href="upgrading-5.1.html" /> <link rel="prev" title="Upgrading to Varnish 5.2" href="upgrading-5.2.html" /> </head> <body role="document"> <div class="related" role="navigation" aria-label="related navigation"> <h3>Navigation</h3> <ul> <li class="right" style="margin-right: 10px"> <a href="../genindex.html" title="General Index" accesskey="I">index</a></li> <li class="right" > <a href="upgrading-5.1.html" title="Upgrading to Varnish 5.1" accesskey="N">next</a> |</li> <li class="right" > <a href="upgrading-5.2.html" title="Upgrading to Varnish 5.2" accesskey="P">previous</a> |</li> <li class="nav-item nav-item-0"><a href="../index.html">Varnish version 5.2.1 documentation</a> »</li> <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">What's new / Upgrading</a> »</li> </ul> </div> <div class="document"> <div class="documentwrapper"> <div class="bodywrapper"> <div class="body" role="main"> <div class="section" id="changes-in-varnish-5-1"> <span id="whatsnew-changes-5-1"></span><h1>Changes in Varnish 5.1<a class="headerlink" href="#changes-in-varnish-5-1" title="Permalink to this headline">¶</a></h1> <p>We have a couple of new and interesting features in Varnish 5.1, and we have a lot of smaller improvements and bugfixes all over the place, in total we have made about 750 commits since Varnish 5.0, so this is just some of the highlights.</p> <p>Probably the biggest change in Varnish 5.1 is that a couple of very significant contributors to Varnish have changed jobs, and therefore stopped being active contributors to the Varnish Project.</p> <p>Per Buer was one of the first people who realized that Varnish was not just "Some program for a couple of Nordic newspapers", and he started the company Varnish Software, which is one of the major sponsors of the Varnish Project.</p> <p>Lasse Karstensen got roped into Varnish Software by Per, and in addition to his other duties, he has taken care of the projects system administration and release engineering for most of the 11 years we have been around now.</p> <p>Per & Lasse: "Thanks" doesn't even start to cover it, and we wish you all the best for the future!</p> <div class="section" id="startup-cli-command-file"> <span id="whatsnew-clifile"></span><h2>Startup CLI command file<a class="headerlink" href="#startup-cli-command-file" title="Permalink to this headline">¶</a></h2> <p>The new '-I cli_file' option to varnishd will make it much more practical to use the VCL labels introduced in Varnish 5.0.</p> <p>The cli commands in the file will be executed before the worker process starts, so it could for instance contain:</p> <div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">vcl</span><span class="o">.</span><span class="n">load</span> <span class="n">panic</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">varnish_panic</span><span class="o">.</span><span class="n">vcl</span> <span class="n">vcl</span><span class="o">.</span><span class="n">load</span> <span class="n">siteA0</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">varnish_siteA</span><span class="o">.</span><span class="n">vcl</span> <span class="n">vcl</span><span class="o">.</span><span class="n">load</span> <span class="n">siteB0</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">varnish_siteB</span><span class="o">.</span><span class="n">vcl</span> <span class="n">vcl</span><span class="o">.</span><span class="n">load</span> <span class="n">siteC0</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">varnish_siteC</span><span class="o">.</span><span class="n">vcl</span> <span class="n">vcl</span><span class="o">.</span><span class="n">label</span> <span class="n">siteA</span> <span class="n">siteA0</span> <span class="n">vcl</span><span class="o">.</span><span class="n">label</span> <span class="n">siteB</span> <span class="n">siteB0</span> <span class="n">vcl</span><span class="o">.</span><span class="n">label</span> <span class="n">siteC</span> <span class="n">siteC0</span> <span class="n">vcl</span><span class="o">.</span><span class="n">load</span> <span class="n">main</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">varnish_main</span><span class="o">.</span><span class="n">vcl</span> <span class="n">vcl</span><span class="o">.</span><span class="n">use</span> <span class="n">main</span> </pre></div> </div> <p>If a command in the file is prefixed with '-', failure will not abort the startup.</p> <p>Related to this change we have reordered the argument checking so that argument problems are reported more consistently.</p> <p>In case you didn't hear about them yet, labelling VCL programs allows you to branch out to other VCLs in the main::vcl_recv{}, which in the above example could look like:</p> <div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">sub</span> <span class="n">vcl_recv</span> <span class="p">{</span> <span class="k">if</span> <span class="p">(</span><span class="n">req</span><span class="o">.</span><span class="n">http</span><span class="o">.</span><span class="n">host</span> <span class="o">~</span> <span class="s2">"asite.example.com$"</span><span class="p">)</span> <span class="p">{</span> <span class="k">return</span><span class="p">(</span><span class="n">vcl</span><span class="p">(</span><span class="n">siteA</span><span class="p">));</span> <span class="p">}</span> <span class="k">if</span> <span class="p">(</span><span class="n">req</span><span class="o">.</span><span class="n">http</span><span class="o">.</span><span class="n">host</span> <span class="o">~</span> <span class="s2">"bsite.example.com$"</span><span class="p">)</span> <span class="p">{</span> <span class="k">return</span><span class="p">(</span><span class="n">vcl</span><span class="p">(</span><span class="n">siteB</span><span class="p">));</span> <span class="p">}</span> <span class="k">if</span> <span class="p">(</span><span class="n">req</span><span class="o">.</span><span class="n">http</span><span class="o">.</span><span class="n">host</span> <span class="o">~</span> <span class="s2">"csite.example.com$"</span><span class="p">)</span> <span class="p">{</span> <span class="k">return</span><span class="p">(</span><span class="n">vcl</span><span class="p">(</span><span class="n">siteC</span><span class="p">));</span> <span class="p">}</span> <span class="o">//</span> <span class="n">Main</span> <span class="n">site</span> <span class="n">processing</span> <span class="o">...</span> <span class="p">}</span> </pre></div> </div> </div> <div class="section" id="universal-vcl-return-fail"> <h2>Universal VCL return(fail)<a class="headerlink" href="#universal-vcl-return-fail" title="Permalink to this headline">¶</a></h2> <p>It is now possible to <code class="docutils literal"><span class="pre">return(fail)</span></code> anywhere in VCL, including inside VMODs. This will cause VCL processing to terminate forthright.</p> <p>In addition to <code class="docutils literal"><span class="pre">return(fail)</span></code>, this mechanism will be used to handle all failure conditions without a safe fallback, for instance workspace exhaustion, too many headers etc. (This is a work in progress, there is a lot of code to review before we are done.)</p> <p>In <code class="docutils literal"><span class="pre">vcl_init{}</span></code> failing causes the <code class="docutils literal"><span class="pre">vcl.load</span></code> to fail, this is nothing new for this sub-routine.</p> <p>A failure in any of the client side VCL methods (<code class="docutils literal"><span class="pre">vcl_recv{}</span></code>, <code class="docutils literal"><span class="pre">vcl_hash{}</span></code> ...) <em>except</em> <code class="docutils literal"><span class="pre">vcl_synth{}</span></code>, sends the request to <code class="docutils literal"><span class="pre">vcl_synth{}</span></code> with a 503, and reason "VCL failed".</p> <p>A failure on the backend side (<code class="docutils literal"><span class="pre">vcl_backend_*{}</span></code>) causes the fetch to fail.</p> <p>(VMOD writers should use the new <code class="docutils literal"><span class="pre">VRT_fail(ctx,</span> <span class="pre">format_string,</span> <span class="pre">...)</span></code> function which logs a SLT_VCL_Error record.)</p> </div> <div class="section" id="progress-on-http-2-support"> <h2>Progress on HTTP/2 support<a class="headerlink" href="#progress-on-http-2-support" title="Permalink to this headline">¶</a></h2> <p>HTTP/2 support is better than in 5.0, and is now enabled and survives pretty well on our own varnish-cache.org website, but there are still things missing, most notably windows and priority, which may be fatal to more complex websites.</p> <p>We expect HTTP/2 support to be production ready in the autumn 2017 release of Varnish-Cache, but that requires a testing and feedback from real-world applications.</p> <p>So if you have a chance to test our HTTP/2 code, by all means do so, please report any crashes, bugs or other trouble back to us.</p> <p>To enable HTTP/2 you need to <code class="docutils literal"><span class="pre">param.set</span> <span class="pre">feature</span> <span class="pre">+http2</span></code> but due to internet-politics, you will only see HTTP/2 traffic if you have an SSL proxy in front of Varnish which advertises HTTP2 with ALPN.</p> <p>For the hitch SSL proxy, add the argument <code class="docutils literal"><span class="pre">--alpn-protos="h2,http/1.1"</span></code></p> </div> <div class="section" id="hit-for-pass-has-returned"> <span id="whatsnew-changes-5-1-hitpass"></span><h2>Hit-For-Pass has returned<a class="headerlink" href="#hit-for-pass-has-returned" title="Permalink to this headline">¶</a></h2> <p>As hinted in <a class="reference internal" href="changes-5.0.html#whatsnew-changes-5-0"><span class="std std-ref">Changes in Varnish 5.0</span></a>, we have restored the possibility of invoking the old hit-for-pass feature in VCL. The treatment of uncacheable content that was new in version 5.0, which we have taken to calling "hit-for-miss", remains the default. Now you can choose hit-for-pass with <code class="docutils literal"><span class="pre">return(pass(DURATION))</span></code> from <code class="docutils literal"><span class="pre">vcl_backend_response</span></code>, setting the duration of the hit-for-pass state in the argument to <code class="docutils literal"><span class="pre">pass</span></code>. For example: <code class="docutils literal"><span class="pre">return(pass(120s))</span></code>.</p> <p>To recap: when <code class="docutils literal"><span class="pre">beresp.uncacheable</span></code> is set to <code class="docutils literal"><span class="pre">true</span></code> in <code class="docutils literal"><span class="pre">vcl_backend_response</span></code>, Varnish makes a note of it with a minimal object in the cache, and finds that information again on the next lookup for the same object. In essence, the cache is used to remember that the last backend response was not cacheable. In that case, Varnish proceeds as with a cache miss, so that the response may become cacheable on subsequent requests. The difference is that Varnish does not perform request coalescing, as it does for ordinary misses, when a response has been marked uncacheable. For ordinary misses, when there are requests pending for the same object at the same time, only one fetch is executed at a time, since the response may be cached, in which case the cached response may be used for the remaining requests. But this is not done for "hit-for-miss" objects, since they are known to have been uncacheable on the previous fetch.</p> <p><code class="docutils literal"><span class="pre">builtin.vcl</span></code> sets <code class="docutils literal"><span class="pre">beresp.uncacheable</span></code> to <code class="docutils literal"><span class="pre">true</span></code> when a number of conditions hold for a backend response that indicate that it should not be cached, for example if the TTL has been determined to be 0 (perhaps due to a <code class="docutils literal"><span class="pre">Cache-Control</span></code> header), or if a <code class="docutils literal"><span class="pre">Set-Cookie</span></code> header is present in the response. So hit-for-miss is the default for uncacheable backend responses.</p> <p>A consequence of this is that fetches for uncacheable responses cannot be conditional in the default case. That is, the backend request may not include the headers <code class="docutils literal"><span class="pre">If-Modified-Since</span></code> or <code class="docutils literal"><span class="pre">If-None-Match</span></code>, which might cause the backend to return status "304 Not Modified" with no response body. Since the response to a cache miss might be cached, there has to be a body to cache, and this is true of hit-for-miss as well. If either of those two headers were present in the client request, they are removed from the backend request for a miss or hit-for-miss.</p> <p>Since conditional backend requests and the 304 response may be critical to performance for non-cacheable content, especially if the response body is large, we have made the old hit-for-pass feature available again, with <code class="docutils literal"><span class="pre">return(pass(DURATION))</span></code> in VCL.</p> <p>As with hit-for-miss, Varnish uses the cache to make a note of hit-for-pass objects, and finds them again on subsequent lookups. The requests are then processed as for ordinary passes (<code class="docutils literal"><span class="pre">return(pass)</span></code> from <code class="docutils literal"><span class="pre">vcl_recv</span></code>) -- there is no request coalescing, and the response will not be cached, even if it might have been otherwise. <code class="docutils literal"><span class="pre">If-Modified-Since</span></code> or <code class="docutils literal"><span class="pre">If-None-Match</span></code> headers in the client request are passed along in the backend request, and a backend response with status 304 and no body is passed back to the client.</p> <p>The hit-for-pass state of an object lasts for the time given as the DURATION in the previous return from <code class="docutils literal"><span class="pre">vcl_backend_response</span></code>. After the "hit-for-pass TTL" elapses, the next request will be an ordinary miss. So a hit-for-pass object cannot become cacheable again until that much time has passed.</p> </div> <div class="section" id="not-modified-responses-after-a-pass"> <h2>304 Not Modified responses after a pass<a class="headerlink" href="#not-modified-responses-after-a-pass" title="Permalink to this headline">¶</a></h2> <p>Related to the previous topic, there has been a change in the way Varnish handles a very specific case: deciding whether to send a "304 Not Modified" response to the client after a pass, when the backend had the opportunity to send a 304 response, but chose not to by sending a 200 response status instead.</p> <p>Previously, Varnish went along with the backend when this happened, sending the 200 response together with the response body to the client. This was the case even if the backend set the response headers <code class="docutils literal"><span class="pre">ETag</span></code> and/or <code class="docutils literal"><span class="pre">Last-Modified</span></code> so that, when compared to the request headers <code class="docutils literal"><span class="pre">If-None-Match</span></code> and <code class="docutils literal"><span class="pre">If-Modified-Since</span></code>, a 304 response would seem to be warranted. Since those headers are passed back to the client, the result could appear a bit odd from the client's perspective -- the client used the request headers to ask if the response was unmodified, and the response headers seem to indicate that it wasn't, and yet the response status suggests that it was.</p> <p>Now the decision to send a 304 client response status is made solely at delivery time, based on the contents of the client request headers and the headers in the response that Varnish is preparing to send, regardless of whether the backend fetch was a pass. So Varnish may send a 304 client response after a pass, even though the backend chose not to, having seen the same request headers (if the response headers permit it).</p> <p>We made this change for consistency -- for hits, misses, hit-for-miss, hit-for-pass, and now pass, the decision to send a 304 client response is based solely on the contents of client request headers and the response headers.</p> <p>You can restore the previous behavior -- don't send a 304 client response on pass if the backend didn't -- with VCL means, either by removing the <code class="docutils literal"><span class="pre">ETag</span></code> or <code class="docutils literal"><span class="pre">Last-Modified</span></code> headers in <code class="docutils literal"><span class="pre">vcl_backend_response</span></code>, or by removing the If-* client request headers in <code class="docutils literal"><span class="pre">vcl_pass</span></code>.</p> </div> <div class="section" id="vxid-in-vsl-queries"> <h2>VXID in VSL queries<a class="headerlink" href="#vxid-in-vsl-queries" title="Permalink to this headline">¶</a></h2> <p>The Varnish Shared Log (VSL) became much more powerful starting Varnish 4.0 and hasn't changed much since. Changes usually consist in adding new log records when new feature are introduced, or when we realize that some missing piece of information could really help troubleshooting.</p> <p>Varnish UTilities (VUT) relying on the VSL usually share the same <code class="docutils literal"><span class="pre">-q</span></code> option for querying, which allows to filter transactions based on log records. For example you could be looking for figures on a specific domain:</p> <div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">varnishtop</span> <span class="o">-</span><span class="n">i</span> <span class="n">ReqURL</span> <span class="o">-</span><span class="n">q</span> <span class="s1">'ReqHeader:Host eq www.example.com'</span> </pre></div> </div> <p>While options like <code class="docutils literal"><span class="pre">-i</span></code> and <code class="docutils literal"><span class="pre">-q</span></code> were until now both limited to log records, it also meant you could only query a specific transaction using the <code class="docutils literal"><span class="pre">X-Varnish</span></code> header. Depending on the nature of the transaction (client or backend side) the syntax is not the same and you can't match a session.</p> <p>For instance, we are looking for the transaction 1234 that occurred very recently and we would like to collect everything from the same session. We have two options:</p> <div class="highlight-default"><div class="highlight"><pre><span></span><span class="c1"># client side</span> <span class="n">varnishlog</span> <span class="o">-</span><span class="n">d</span> <span class="o">-</span><span class="n">g</span> <span class="n">session</span> <span class="o">-</span><span class="n">q</span> <span class="s1">'RespHeader:X-Varnish[1] == 1234'</span> <span class="c1"># backend side</span> <span class="n">varnishlog</span> <span class="o">-</span><span class="n">d</span> <span class="o">-</span><span class="n">g</span> <span class="n">session</span> <span class="o">-</span><span class="n">q</span> <span class="s1">'BereqHeader:X-Varnish == 1234'</span> </pre></div> </div> <p>There was no simple way to match any transaction using its id until the introduction of <code class="docutils literal"><span class="pre">vxid</span></code> as a possible left-hand side of a <code class="docutils literal"><span class="pre">-q</span></code> query expression:</p> <div class="highlight-default"><div class="highlight"><pre><span></span><span class="c1"># client side</span> <span class="n">varnishlog</span> <span class="o">-</span><span class="n">d</span> <span class="o">-</span><span class="n">g</span> <span class="n">session</span> <span class="o">-</span><span class="n">q</span> <span class="s1">'vxid == 1234'</span> <span class="c1"># backend side</span> <span class="n">varnishlog</span> <span class="o">-</span><span class="n">d</span> <span class="o">-</span><span class="n">g</span> <span class="n">session</span> <span class="o">-</span><span class="n">q</span> <span class="s1">'vxid == 1234'</span> <span class="c1"># session</span> <span class="n">varnishlog</span> <span class="o">-</span><span class="n">d</span> <span class="o">-</span><span class="n">g</span> <span class="n">session</span> <span class="o">-</span><span class="n">q</span> <span class="s1">'vxid == 1234'</span> </pre></div> </div> <p>Another use case is the collection of non-transactional logs. With raw grouping the output is organized differently and each record starts with its transaction id or zero for non-transactional logs:</p> <div class="highlight-default"><div class="highlight"><pre><span></span><span class="c1"># before 5.1</span> <span class="n">varnishlog</span> <span class="o">-</span><span class="n">g</span> <span class="n">raw</span> <span class="o">|</span> <span class="n">awk</span> <span class="s1">'$1 == 0'</span> <span class="c1"># from now on</span> <span class="n">varnishlog</span> <span class="o">-</span><span class="n">g</span> <span class="n">raw</span> <span class="o">-</span><span class="n">q</span> <span class="s1">'vxid == 0'</span> </pre></div> </div> <p>This should offer you a more concise, and more consistent means to filter transactions with <code class="docutils literal"><span class="pre">varnishlog</span></code> and other VUTs.</p> </div> <div class="section" id="project-tool-improvements"> <span id="whatsnew-changes-5-1-vtest"></span><h2>Project tool improvements<a class="headerlink" href="#project-tool-improvements" title="Permalink to this headline">¶</a></h2> <p>We have spent a fair amount of time on the tools we use internally in the project.</p> <p>The <code class="docutils literal"><span class="pre">varnishtest</span></code> program has been improved in many small ways, in particular it is now much easier to execute and examine results from other programs with the <code class="docutils literal"><span class="pre">shell</span></code> and <code class="docutils literal"><span class="pre">process</span></code> commands. It might break existing test cases if you were already using <code class="docutils literal"><span class="pre">varnishtest</span></code>.</p> <p>The project now has <em>KISS</em> web-backend which summarizes <code class="docutils literal"><span class="pre">make</span> <span class="pre">distcheck</span></code> results from various platforms:</p> <p><a class="reference external" href="http://varnish-cache.org/vtest/">http://varnish-cache.org/vtest/</a></p> <p>If you want Varnish to be tested on a platform not already covered, all you need to do is run the tools/vtest.sh script from the source tree. We would love to see more platforms covered (arm64, ppc, mips) and OS/X would also be nice.</p> <p>We also publish our code-coverage status now:</p> <p><a class="reference external" href="http://varnish-cache.org/gcov/">http://varnish-cache.org/gcov/</a></p> <p>Our goal is 90+% coverage, but we need to start implementing terminal emulation in <code class="docutils literal"><span class="pre">varnishtest</span></code> before we can test the curses(1) based programs (top/stat/hist) comprehensively, so they currently drag us down.</p> </div> <div class="section" id="news-for-authors-of-vmods-and-varnish-api-client-applications"> <h2>News for authors of VMODs and Varnish API client applications<a class="headerlink" href="#news-for-authors-of-vmods-and-varnish-api-client-applications" title="Permalink to this headline">¶</a></h2> <ul> <li><p class="first">The VRT version has been bumped to 6.0, since there have been some changes and additions to the ABI. See <code class="docutils literal"><span class="pre">vrt.h</span></code> for an overview.</p> </li> <li><p class="first">In particular, there have been some changes to the <code class="docutils literal"><span class="pre">WS_*</span></code> interface for accessing workspaces. We are working towards fully encapsulating workspaces with the <code class="docutils literal"><span class="pre">WS_*</span></code> family of functions, so that it should not be necessary to access the internals of a <code class="docutils literal"><span class="pre">struct</span> <span class="pre">ws</span></code>, which may be revised in a future release. There are no revisions at present, so your code won't break if you're working with the innards of a <code class="docutils literal"><span class="pre">struct</span> <span class="pre">ws</span></code> now, but you would be prudent to replace that code with <code class="docutils literal"><span class="pre">WS_*</span></code> calls some time before the next release. And please let us know if there's something you need to do that the workspace interface won't handle.</p> </li> <li><p class="first"><code class="docutils literal"><span class="pre">libvarnishapi.so</span></code> now exports more symbols from Varnish internal libraries:</p> <ul class="simple"> <li>All of the <code class="docutils literal"><span class="pre">VTIM_*</span></code> functions -- getting clock times, formatting and parsing date & time formats, sleeping and so forth.</li> <li>All of the <code class="docutils literal"><span class="pre">VSB_*</span></code> functions for working with safe string buffers.</li> </ul> </li> <li><p class="first"><code class="docutils literal"><span class="pre">varnish.m4</span></code> and <code class="docutils literal"><span class="pre">varnishapi.pc</span></code> now expose more information about the Varnish installation. See "Since 5.1.0" comments for a comprehensive list of what was added.</p> </li> <li><p class="first">VMOD version coexistence improvements: In difference from executable files, shared libraries are not protected against overwriting under UNIX, and this has generally caused grief when VMODs were updated by package management tools.</p> <p>We have decided to bite the bullet, and now the Varnishd management process makes a copy of the VMOD shared library to a version-unique name inside the workdir, from which the running VCL access it. This ensures that Varnishd can always restart the worker process, no matter what happened to the original VMOD file.</p> <p>It also means that VMODs maintaining state spanning VCL reloads might break. It is still possible to maintain global state in a VMOD despite VMOD caching: one solution is to move the global state into separate shared library that won't be cached by Varnish.</p> </li> </ul> <p><em>EOF</em></p> </div> </div> </div> </div> </div> <div class="sphinxsidebar" role="navigation" aria-label="main navigation"> <div class="sphinxsidebarwrapper"> <h3><a href="../index.html">Table Of Contents</a></h3> <ul> <li><a class="reference internal" href="#">Changes in Varnish 5.1</a><ul> <li><a class="reference internal" href="#startup-cli-command-file">Startup CLI command file</a></li> <li><a class="reference internal" href="#universal-vcl-return-fail">Universal VCL return(fail)</a></li> <li><a class="reference internal" href="#progress-on-http-2-support">Progress on HTTP/2 support</a></li> <li><a class="reference internal" href="#hit-for-pass-has-returned">Hit-For-Pass has returned</a></li> <li><a class="reference internal" href="#not-modified-responses-after-a-pass">304 Not Modified responses after a pass</a></li> <li><a class="reference internal" href="#vxid-in-vsl-queries">VXID in VSL queries</a></li> <li><a class="reference internal" href="#project-tool-improvements">Project tool improvements</a></li> <li><a class="reference internal" href="#news-for-authors-of-vmods-and-varnish-api-client-applications">News for authors of VMODs and Varnish API client applications</a></li> </ul> </li> </ul> <h4>Previous topic</h4> <p class="topless"><a href="upgrading-5.2.html" title="previous chapter">Upgrading to Varnish 5.2</a></p> <h4>Next topic</h4> <p class="topless"><a href="upgrading-5.1.html" title="next chapter">Upgrading to Varnish 5.1</a></p> <div role="note" aria-label="source link"> <h3>This Page</h3> <ul class="this-page-menu"> <li><a href="../_sources/whats-new/changes-5.1.txt" rel="nofollow">Show Source</a></li> </ul> </div> <div id="searchbox" style="display: none" role="search"> <h3>Quick search</h3> <form class="search" action="../search.html" method="get"> <div><input type="text" name="q" /></div> <div><input type="submit" value="Go" /></div> <input type="hidden" name="check_keywords" value="yes" /> <input type="hidden" name="area" value="default" /> </form> </div> <script type="text/javascript">$('#searchbox').show(0);</script> </div> </div> <div class="clearer"></div> </div> <div class="related" role="navigation" aria-label="related navigation"> <h3>Navigation</h3> <ul> <li class="right" style="margin-right: 10px"> <a href="../genindex.html" title="General Index" >index</a></li> <li class="right" > <a href="upgrading-5.1.html" title="Upgrading to Varnish 5.1" >next</a> |</li> <li class="right" > <a href="upgrading-5.2.html" title="Upgrading to Varnish 5.2" >previous</a> |</li> <li class="nav-item nav-item-0"><a href="../index.html">Varnish version 5.2.1 documentation</a> »</li> <li class="nav-item nav-item-1"><a href="index.html" >What's new / Upgrading</a> »</li> </ul> </div> <div class="footer" role="contentinfo"> © Copyright 2010-2014, Varnish Software AS. Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.4.9. </div> </body> </html>