About pseudo headers

Pseudo headers are special headers that are used in HTTP/2 to provide metadata about the request or response in a structured way. Although they look like traditional HTTP/1.x headers, they come with specific characteristics:

  • Pseudo headers must always start with a colon (:).
  • They must appear before regular headers in the HTTP/2 frame.
  • Pseudo headers contain details about the request or response.

Common pseudo headers include:

  • :method: The HTTP method that is used, such as GET or POST.
  • :scheme: The protocol that is used, such as http or https.
  • :authority: The hostname and port number that the request is sent to.
  • :path: The path of the request.

Before you begin

  1. Follow the Get started guide to install Gloo Gateway, set up a gateway resource, and deploy the httpbin sample app.

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

Use pseudo headers for redirect URLs

  1. Create a RouteOption or VirtualHostOption resource that defines the following transformation rules:

    • Build a redirect URL with the values of the :authority and :path pseudo headers. These headers are extracted from the request with the request_header function that is provided in Gloo Gateway.
    • The :authority pseudo header contains the hostname that the request is sent to.
    • The :path pseudo header is set to the request path.
    • The redirect URL is added to the x-forwarded-uri response header.
  2. Send a request to the httpbin app. Verify that you see the x-forwarded-uri response header that is set to the hostname and path that was used in the initial request.

    Example output:

      ...
    * Request completely sent off
    < HTTP/1.1 200 OK
    HTTP/1.1 200 OK
    < access-control-allow-credentials: true
    access-control-allow-credentials: true
    < access-control-allow-origin: *
    access-control-allow-origin: *
    ...
    < x-forwarded-uri: https://www.example.com:8080/response-headers
    x-forwarded-uri: https://www.example.com:8080/response-headers
    < server: envoy
    server: envoy
    < 
      

Cleanup

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

  kubectl delete virtualhostoption transformation -n gloo-system
kubectl delete routeoption transformation -n httpbin