varnishd

Handle object workspace overruns better.

Allow turning off ESI processing per request by using `set req.esi = off`.

Tell the kernel that we expect to use the mmap-ed file in a random fashion. On Linux, this turns off/down readahead and increases performance.

Make it possible to change the maximum number of HTTP headers we allow by passing `--with-max-header-fields=NUM` rather than changing the code.

Implement support for HTTP continuation lines.

Change how connections are closed and only use SO_LINGER for orderly connection closure. This should hopefully make worker threads less prone to hangups on network problems.

Handle multi-element purges correctly. Previously we ended up with parse errors when this was done from VCL.

Handle illegal responses from the backend better by serving a 503 page rather than panic-ing.

When we run into an assertion that is not true, Varnish would previously dump a little bit of information about itself. Extend that information with a backtrace. Note that this relies on the varnish binary being unstripped.

Add a session_max parameter that limits the maximum number of sessions we keep open before we start dropping new connections summarily.

Try to consume less memory when doing ESI processing by properly rolling back used workspace after processing an object. This should make it possible to turn `sess_workspace` quite a bit for users with ESI-heavy pages.

Turn on `session_linger` by default. Tests have shown that `session_linger` helps a fair bit with performance.

Rewrite the epoll acceptor for better performance. This should lead to both higher processing rates and maximum number of connections on Linux.

Add If-None-Match support, this gives significant bandwidth savings for users with compliant browsers.

RFC2616 specifies that `ETag`, `Content-Location`, `Expires`, `Cache-Control` and `Vary` should be emitted when delivering a response with the 304 response code.

Various fixes which makes Varnish compile and work on AIX.

Turn on TCP_DEFER_ACCEPT on Linux. This should make us less suspecible to denial of service attacks as well as give us slightly better performance.

Add an `.initial` property to the backend probe specification. This is the number of good probes we pretend to have seen. The default is one less than .threshold, which means the first probe will decide if we consider the backend healthy.

Make it possible to compare strings against other string-like objects, not just plain strings. This allows you to compare two headers, for instance.

When support for `restart` in `vcl_error` was added, there was no check to prevent infinte recursion. This has now been fixed.

Turn on purge_dups by default. This should make us consume less memory when there are many bans for the same pattern added.

Add a new log tag called `FetchError` which tries to explain why we could not fetch an object from the backend.

Change the default `srcaddr_ttl` to 0. It is not used by anything and has been removed in the development version. This will increase performance somewhat.

varnishtop

varnishtop did not handle variable-length log fields correctly. This is now fixed.

varnishtop previously did not print the name of the tag, which made it very hard to understand. We now print out the tag name.