Headers
The Envoy HTTP connection manager allows HTTP header manipulations both when the request is being received and when the response is being sent. The official documentation can be found here. Grey Matter utilizes this to manipulate HTTP headers at several levels and also allows users to add their own custom headers.
The order of header precedence is:
Weighted cluster level headers
Route level headers
Virtual host level headers
Global level headers
Header manipulations
In order to keep track of potential overwrites of header values, we will go over places we can add custom headers in the order of precedence. Envoy supports some variables mentioned here.
2. Virtual host level headers
You can append your custom headers by defining custom_headers
at the Domain level:
{
...,
"custom_headers": [
{
"key": "My-Custom-Header",
"value": "hello-world"
}
]
}
ℹ️ The custom headers specified here will be added to Envoy virtual host's request.
4. Weighted cluster level headers
4.1 Edge Route
response_data
4.2 Service Route
response_data
4.3 Edge SharedRules
response_data
4.4 ServiceSharedRules
response_data
Routes and SharedRules both have response_data
, and values from a Route take precedence over those from a SharedRules object as mentioned in the API doc. Between Edge's Route/SharedRules and a service's (e.g. Fibonacci service), Edge's headers take precedence; while cookies get appended.
Cookies are attached via Set-Cookie
header and we can use aforementioned Envoy variables by setting value_is_literal
to false
. On the other hand, by setting value_is_literal
to true
, the %
literal can be used without escaping.
{
...,
"response_data": {
"headers": [
{
"name": "My-Custom-Header",
"value": "hello-world",
"value_is_literal": true
}
],
"cookies": [
{
"name": "my_cookie",
"value": "cookie-value",
"value_is_literal": true,
"expires_in_sec": 60000,
"domain": "a5c047016227111ea9bff0295a6daf52-1281033796.us-west-2.elb.amazonaws.com",
"path": "/",
"secure": true,
"http_only": true,
"same_site": "Lax"
}
]
}
}
ℹ️ As the name suggests, headers specified here will be added to Envoy weighted cluster's response.
Here are naming pattern for Header and Cookie:
HeaderNamePatternStr = "^[0-9A-Za-z-]+$"
CookieNamePatternStr = "^[0-9A-Za-z_.-]+$"
Last updated
Was this helpful?