header.set
Available inall subroutines.
Sets a header by name.
This is equivalent to the set
statement except that the header name
is given as a string, and may be passed dynamically.
Header names are case insensitive.
The where argument is one of the literal identifiers req
, resp
, obj
,
bereq
, or beresp
, corresponding to the predefined
variable of the same
name. The predefined variable associated with the where argument must be
writable within the VCL subroutine where header.set
is called.
header.set(req, "abc", "xyz");
is equivalent to:
set req.http.abc = "xyz";
See also the set statement, the client request, and other request and response variables.
Some headers are protected. These headers cannot be set,
and the header.set
function has no effect.
See the Header reference
for which headers are protected.
Calling header.set
for a header which does not exist, or passing the empty string,
a not-set value, or a string that would be invalid as a header name,
also has no effect.
Header names
A valid header name consists of one or more of the following characters:
! # $ % & ' * + - . 0-9 A-Z ^ _ ` a-z | ~
This is beyond what's possible to set by the set resp.http.xyz = ...;
syntax because
some of these characters are not permitted in VCL variable names.
For example, it is possible to set a header named hello!
(with the exclamation mark):
header.set(resp, "hello!", "abc"); # in the http response: hello!: abc
which is not possible using the set resp.http.xyz = ...;
syntax.
Leading and trailing whitespace are not permitted in header names.
The maximum length for a header name is 126 characters.