varnishd

The request workflow has been redesigned to simplify request processing and eliminate code duplication. All codepaths which need to speak HTTP now share a single implementation of the protocol. Some new VCL hooks have been added, though they aren't much use yet. The only real user-visible change should be that Varnish now handles persistent backend connections correctly (see ).

Support for multiple listen addresses has been added.

An "include" facility has been added to VCL, allowing VCL code to pull in code fragments from multiple files.

Multiple definitions of the same VCL function are now concatenated into one in the order in which they appear in the source. This simplifies the mechanism for falling back to the built-in default for cases which aren't handled in custom code, and facilitates modularization.

The code used to format management command arguments before passing them on to the child process would underestimate the amount of space needed to hold each argument once quotes and special characters were properly escaped, resulting in a buffer overflow. This has been corrected.

The VCL compiler has been overhauled. Several memory leaks have been plugged, and error detection and reporting has been improved throughout. Parts of the compiler have been refactored to simplify future extension of the language.

A bug in the VCL compiler which resulted in incorrect parsing of the decrement (`-=`) operator has been fixed.

A new `-C` command-line option has been added which causes `varnishd` to compile the VCL code (either from a file specified with `-f` or the built-in default), print the resulting C code and exit.

When processing a backend response using chunked encoding, if a chunk header crosses a read buffer boundary, read additional bytes from the backend connection until the chunk header is complete.

A new `ping_interval` run-time parameter controls how often the management process checks that the worker process is alive.

A bug which would cause the worker process to dereference a `NULL` pointer and crash if the backend did not respond has been fixed.

In some cases, such as when they are used by AJAX applications to circumvent Internet Explorer's over-eager disk cache, it may be desirable to cache `POST` requests. However, the code path responsible for delivering objects from cache would only transmit the response body when replying to a `GET` request. This has been extended to also apply to `POST`.

This should be revisited at a later date to allow VCL code to control whether the body is delivered.

Varnish now respects `Cache-control: s-maxage`, and prefers it to `Cache-control: max-age` if both are present.

This should be revisited at a later date to allow VCL code to control which headers are used and how they are interpreted.

When loading a new VCL script, the management process will now load the compiled object to verify that it links correctly before instructing the worker process to load it.

A new `-P` command-line options has been added which causes `varnishd` to create a PID file.

The `sendfile_threshold` run-time parameter's default value has been set to infinity after a variety of `sendfile()`-related bugs were discovered on several platforms.

varnishlog

When grouping log entries by request, `varnishlog` attempts to collapse the log entry for a call to a VCL function with the log entry for the corresponding return from VCL. When two VCL calls were made in succession, `varnishlog` would incorrectly omit the newline between the two calls (see ).

New `-D` and `-P` command-line options have been added to daemonize and create a pidfile, respectively.

The flag that is raised upon reception of a `SIGHUP` has been marked `volatile` so it will not be optimized away by the compiler.

varnishncsa

The formatting callback has been largely rewritten for clarity, robustness and efficiency.

If a request included a `Host:` header, construct and output an absolute URL. This makes `varnishncsa` output from servers which handle multiple virtual hosts far more useful.

The flag that is raised upon reception of a `SIGHUP` has been marked `volatile` so it will not be optimized away by the compiler.

Documentation

The documentation&mdash;especially the VCL documentation&mdash;has been greatly extended and improved.

Build system

The name and location of the `curses` or `ncurses` library is now correctly detected by the `configure` script instead of being hardcoded into affected Makefiles. This allows Varnish to build correctly on a wider range of platforms.

Compatibility shims for `clock_gettime()` are now correctly applied where needed, allowing Varnish to build on MacOS X.

The `autogen.sh` script will now correctly detect and warn about `automake` versions which are known not to work correctly.