Skip to content
You are viewing the latest documentation for Solo Enterprise for kgateway, formerly known as Gloo Gateway. To access the documentation for older Gloo Gateway versions, such as 2.0 and 1.x, use the version switcher.

Append headers

Page as Markdown

Use the headersToAppend capability to add multiple values to the same header.

In this guide, you explore how to use the headersToAppend transformation template attribute to add multiple values to the same header. The values are separated with a comma.

Before you begin

  1. Follow the Get started guide to install Solo Enterprise for kgateway.

  1. Follow the Sample app guide to create a gateway proxy with an HTTP listener and deploy the httpbin sample app.
  1. Get the external address of the gateway and save it in an environment variable.
    export INGRESS_GW_ADDRESS=$(kubectl get svc -n kgateway-system http -o jsonpath="{.status.loadBalancer.ingress[0]['hostname','ip']}")
    echo $INGRESS_GW_ADDRESS  
    kubectl port-forward deployment/http -n kgateway-system 8080:8080

Append headers

  1. Create an EnterpriseKgatewayTrafficPolicy with the following transformation rules:

    • Extract the value of the Host request header and use this value to build the customcookie2 string. Then, append the transformed string to the Set-Cookie request header.
    • Extract the value of the Host request header and use this value to build the customcookie3 string. Then, append the transformed string to the same Set-Cookie request header.
    kubectl apply -f- <<EOF
    apiVersion: enterprisekgateway.solo.io/v1alpha1
    kind: EnterpriseKgatewayTrafficPolicy
    metadata:
      name: transformation
      namespace: httpbin
    spec:
      targetRefs: 
      - group: gateway.networking.k8s.io
        kind: HTTPRoute
        name: httpbin
      entTransformation:
        stages:
          early: 
            requests: 
            - transformation: 
                template: 
                  headersToAppend: 
                  - key: Set-Cookie
                    value: 'customcookie2={{ request_header("Host") }}'
                  - key: Set-Cookie
                    value: 'customcookie3={{ request_header("Host") }}'
    EOF
  2. Send a request to the httpbin app. Verify that you see multiple values in the Set-Cookie request header.

    curl -vik -H "host: www.example.com:8080" \
      -H "Content-Type: application/json" \
      http://$INGRESS_GW_ADDRESS:8080/headers
    curl -vik localhost:8080/headers \
      -H "host: www.example.com" \
      -H "Content-Type: application/json" 

    Example output:

    {
      "headers": {
        "Accept": [
         "*/*"
        ],
        "Host": [
          "www.example.com:8080"
        ],
        "Set-Cookie": [
          "customcookie2=www.example.com:8080",
          "customcookie3=www.example.com:8080"
        ],
        "User-Agent": [
          "curl/8.7.1"
        ],
        "X-Envoy-Expected-Rq-Timeout-Ms": [
          "15000"
        ],
        "X-Forwarded-Proto": [
          "http"
        ],
        "X-Request-Id": [
          "09fbe5ed-5060-4cf5-835c-46729bf100db"
        ]
      }
    }

Cleanup

You can remove the resources that you created in this guide.

kubectl delete EnterpriseKgatewayTrafficPolicy transformation -n httpbin