Varnish Module for manipulation of duplicated HTTP headers, for instance multiple Set-Cookie headers. Note that for Cookie and Set-Cookie we recommend using the cookieplus VMOD, while this VMOD should be used for other headers that may occur more than once in a HTTP response.
vcl 4.0;
import header;
backend default { .host = "192.0.2.11"; .port = "8080"; }
sub vcl_backend_response {
if (beresp.http.Set-Cookie) {
# Add another line of Set-Cookie in the response.
header.append(beresp.http.Set-Cookie, "VSESS=abbabeef");
# CMS always set this, but doesn't really need it.
header.remove(beresp.http.Set-Cookie, "JSESSIONID=");
}
}
The following functions are available:
VOID append(HEADER, STRING)
Description:
Create a new header field with the given string as value, allowing duplicates. This is used for example to have multiple cookie header fields.
Example:
header.append(beresp.http.Set-Cookie, "foo=bar");
VOID copy(HEADER sources, HEADER merged)
Description:
Copy all source headers to one new header, merging all the values.
Example:
header.copy(beresp.http.set-cookie, beresp.http.x-old-cookie);
STRING get(HEADER header, STRING regex)
Description:
Fetches the value of the first header
that matches the given regular expression regex
.
regex
is static and cannot change between calls.
Example:
set beresp.http.xusr = header.get(beresp.http.set-cookie,"user=");
VOID remove(HEADER header, STRING regex)
Description:
Remove all occurences of header
that matches regex
.
regex
is static and cannot change between calls.
Example:
header.remove(beresp.http.set-cookie,"^(?!(funcookie=))");
The development of this plugin was made possible by the sponsorship of Softonic, http://en.softonic.com/ .
Also thanks to Imo Klabun and Anders Nordby for bug reports.
You can’t use dynamic regular expressions, which also holds true for normal regular expressions in regsub().