Provided by: varnish-modules_0.18.0-1_amd64 bug

NAME

       vmod_header - Header VMOD for Varnish

SYNOPSIS

          import header [as name] [from "path"]

          VOID append(HEADER, STRING)

          VOID copy(HEADER, HEADER)

          STRING get(HEADER header, REGEX regex)

          VOID remove(HEADER header, REGEX regex)

          VOID regsub(HTTP, REGEX regex, STRING sub, BOOL all)

          HEADER dyn(HTTP, STRING)

DESCRIPTION

       Varnish  Module  for  manipulation  of  duplicated  HTTP  headers,  for  instance multiple
       Set-Cookie headers.

       Example:

          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=");
              }
          }

   VOID append(HEADER, STRING)
       Description
              Append an extra occurrence to an existing header.

       Example
              :: header.append(beresp.http.Set-Cookie, "foo=bar")

   VOID copy(HEADER, HEADER)
       Description
              Copy all source headers to a new header.

       Example
              :: header.copy(beresp.http.set-cookie, beresp.http.x-old-cookie);

   STRING get(HEADER header, REGEX regex)
       Description
              Fetches the value of the first header that matches  the  given  regular  expression
              regex.

       Example
              :: set beresp.http.xusr = header.get(beresp.http.set-cookie,"user=");

   VOID remove(HEADER header, REGEX regex)
       Description
              Remove all occurrences of header that matches regex.

       Example
              :: header.remove(beresp.http.set-cookie,"^(?!(funcookie=))");

   VOID regsub(HTTP, REGEX regex, STRING sub, BOOL all=0)
       Description
              For  every  header line in the HTTP object, which can be one of req, resp, bereq or
              beresp, if the line matches the regular expression regex, then replace it with  the
              result  of  a  substitution using the string sub. sub may include backreferences of
              the form \1 through \9, which refer to capturing expressions in the regex, or \0 to
              refer to the entire matched portion of the header line.

              If  all  is  false,  replace the first matched portion of the header line with sub.
              This is the same operation performed by the VCL native function  regsub().  all  is
              false by default.

              If  all  is  true,  replace each non-overlapping matched portion of the header line
              with sub. This is the same operation performed by native regsuball().

              Note that unlike the other functions in this VMOD, regsub() applies to  the  entire
              header  line,  including  the  header name, colon separator, and header value. Take
              care that your substitutions result in valid headers, since ill-formed headers  can
              interfere with the HTTP protocol.

              Consider  case  sensitivity  in  the regex match. The standard dictates that header
              names are case insensitive, but header values are not. The VMOD function  does  not
              take care of that for you, but you can express it in the regex using the (?i) flag,
              as shown in the example below (use (?-i) to turn it off).

              Consider using the ^ starting anchor in regex to be sure to  match  a  header  name
              (and not the same string somewhere in the middle of the line).

       Example
              :: header.regsub(req, "^(?i)Foo(\d): (?-i)bar=(.*)$", "Bar\1: \2")

   HEADER dyn(HTTP, STRING)
       Description
              Return a dynamic header name.

              Most  other  functions  of  this vmod require a HEADER argument, which usually is a
              VCL-defined header like req.http.foo.

              This function allows to construct a header name from an arbitrary string, which may
              also be dynamically created, for example from a variable.

              Notice  that  there  are  no  syntactic checks on the STRING argument by purpose in
              order to support exotic use cases. It is entirely up to the user and at  their  own
              risk to supply a string which represents a valid HTTP header name (or not).

       Example
              ::  #  create this request header # 42: is the answer header.append(header.dyn(req,
              35 + 7), "is the answer");

ACKNOWLEDGEMENTS

       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.

BUGS

       You  can't  use  dynamic  regular  expressions,  which  also holds true for normal regular
       expressions in regsub().

                                                                                   VMOD_HEADER(3)