plucky (3) vmod_header.3.gz

Provided by: varnish-modules_0.25.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)