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 Gloo Gateway.

  2. Follow the Sample app guide to create a gateway proxy with an HTTP listener and deploy the httpbin sample app.

  3. Get the external address of the gateway and save it in an environment variable.

Append headers

  1. Create a GlooTrafficPolicy 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: gloo.solo.io/v1alpha1
    kind: GlooTrafficPolicy
    metadata:
      name: transformation
      namespace: httpbin
    spec:
      targetRefs: 
      - group: gateway.networking.k8s.io
        kind: HTTPRoute
        name: httpbin
      glooTransformation:
        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.

    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 glootrafficpolicy transformation -n httpbin