Skip to content

For the complete documentation index, see llms.txt. Markdown versions of all docs pages are available by appending .md to any docs URL.

Page as Markdown

Promote query parameters to request headers

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

  1. Set up an agentgateway proxy.
  2. 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.

  1. 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"'
    EOF
  2. Send a request with the beta=true query parameter. Verify that you get back a 200 HTTP response code and that the x-beta-features header is set to enabled in 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"
    }
    
  3. Send a request without the beta=true query parameter. Verify that the x-beta-features header is set to disabled.

    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
Was this page helpful?
Agentgateway assistant

Ask me anything about agentgateway configuration, features, or usage.

Note: AI-generated content might contain errors; please verify and test all returned information.

Tip: one topic per conversation gives the best results. Use the + button in the chat header to start a new conversation.

Switching topics? Starting a new conversation improves accuracy.
↑↓ navigate select esc dismiss

What could be improved?

Your feedback helps us improve assistant answers and identify docs gaps we should fix.

Need more help? Join us on Discord: https://discord.gg/y9efgEmppm

Want to use your own agent? Add the Solo MCP server to query our docs directly. Get started here: https://search.solo.io/.