For the complete documentation index, see llms.txt. Markdown versions of all docs pages are available by appending .md to any docs URL.
Promote query parameters to request headers
Verified Code examples on this page have been automatically tested and verified.Read a query parameter from the request URI and inject it as a request header using a CEL conditional expression.
Promote a query parameter to a request header by using CEL expressions. The example uses request.uri with the contains() function and a conditional expression to read a query parameter value and inject it as a request header before the request reaches the upstream.
This configuration is useful when a client passes information as a query parameter but the backend service expects it as a header.
Before you begin
- Set up an agentgateway proxy.
- Install the httpbin sample app.
Promote a query parameter to a request header
In this example, a client passes a feature flag as the beta query parameter. The backend service expects this as the x-beta-features request header. The transformation reads request.uri and sets the header to enabled when beta=true is present, and disabled when it is absent.
Create an AgentgatewayPolicy resource with your transformation rules.
kubectl apply -f- <<EOF apiVersion: agentgateway.dev/v1alpha1 kind: AgentgatewayPolicy metadata: name: transformation namespace: httpbin spec: targetRefs: - group: gateway.networking.k8s.io kind: HTTPRoute name: httpbin traffic: transformation: request: set: - name: x-beta-features value: 'request.uri.contains("beta=true") ? "enabled" : "disabled"' EOFSend a request with the
beta=truequery parameter. Verify that you get back a 200 HTTP response code and that thex-beta-featuresheader is set toenabledin the headers echoed back by httpbin.curl -vi "http://$INGRESS_GW_ADDRESS:80/get?beta=true" \ -H "host: www.example.com:80"Example output:
< HTTP/1.1 200 OK HTTP/1.1 200 OK ... { "args": { "beta": [ "true" ] }, "headers": { "Accept": [ "*/*" ], "Host": [ "www.example.com" ], "User-Agent": [ "curl/8.7.1" ], "X-Beta-Features": [ "enabled" ] }, "origin": "10.244.0.6:12345", "url": "http://www.example.com/get?beta=true" }Send a request without the
beta=truequery parameter. Verify that thex-beta-featuresheader is set todisabled.curl -vi http://$INGRESS_GW_ADDRESS:80/get \ -H "host: www.example.com:80"Example output:
< HTTP/1.1 200 OK HTTP/1.1 200 OK ... { "args": {}, "headers": { "Accept": [ "*/*" ], "Host": [ "www.example.com" ], "User-Agent": [ "curl/8.7.1" ], "X-Beta-Features": [ "disabled" ] }, "origin": "10.244.0.6:12345", "url": "http://www.example.com/get" }
Cleanup
You can remove the resources that you created in this guide.kubectl delete AgentgatewayPolicy transformation -n httpbin