Create redirect URLs
Extract the values of common headers to generate a redirect URL.
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:
- Must always start with a colon (
:). - Must appear before regular headers in the HTTP/2 frame.
- 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
Follow the Get started guide to install Gloo Gateway.
Follow the Sample app guide to create a gateway proxy with an HTTP listener and deploy the httpbin sample app.
Get the external address of the gateway and save it in an environment variable.
Set up redirect URLs
Create a GlooTrafficPolicy resource with the following transformation rules:
- Build a redirect URL with the values of the
:authorityand:pathpseudo headers. These headers are extracted from the request with therequest_headerfunction that is provided in Gloo Gateway. - The
:authoritypseudo header contains the hostname that the request is sent to. - The
:pathpseudo header is set to the request path. - The redirect URL is added to the
x-forwarded-uriresponse 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 transformation: request: add: - name: x-forwarded-uri value: 'https://{{ request_header(":authority") }}{{ request_header(":path") }}' EOF- Build a redirect URL with the values of the
Send a request to the httpbin app. Verify that you get back a 200 HTTP response code and that you see the redirect URL in the
x-forwarded-uriresponse header.Example output:
... < HTTP/1.1 200 OK HTTP/1.1 200 OK ... { "args": {}, "headers": { "Accept": [ "*/*" ], "Host": [ "www.example.com:8080" ], "User-Agent": [ "curl/8.7.1" ], "X-Envoy-Expected-Rq-Timeout-Ms": [ "15000" ], "X-Envoy-External-Address": [ "10.0.9.76" ], "X-Forwarded-For": [ "10.0.9.76" ], "X-Forwarded-Proto": [ "http" ], "X-Forwarded-Uri": [ "https://www.example.com:8080/get" ], "X-Request-Id": [ "55140fab-c68e-44d3-a4fc-7f6242ba8194" ] }, "origin": "10.0.9.76", "url": "http://www.example.com:8080/get" }
Cleanup
You can remove the resources that you created in this guide.
kubectl delete GlooTrafficPolicy transformation -n httpbin