Host header proxy behavior? "X-Forwarded-*" and "Forwarded"

Hello.

We have recently put an AWS API gateway (the new “HTTP API” kind, not “REST API”) in front of our Aptible endpoint.

Question:

  • Is this supported/expected to work?
  • How does the Aptible proxy behave when it comes to the X-Forwarded-* headers and the Host header? Will the Aptible proxy overwrite X-Forwarded-* headers that the AWS API gw sets?
  • Apparently AWS GW “HTTP APIs” also set the newer, standardized Forwarded header. (Not sure if it sets both the older X-Forwarded-* + newer Forwarded or just the newer Forwarded header actually.) Do you know how the Aptible proxy will treat the Forwarded header?

References:

This is the headers of the request we receive in the Aptible container:

AWS API gw: go.stage.jointacademy.com
Aptible endpoint: proxy-web.eu-stage.jointacademy.com

HTTP(S) Endpoints only set two X-Forwarded-* request headers: X-Forwarded-For and X-Forwarded-Proto as described here. Additionally, the Endpoint’s AWS ALB sets the X-Forwarded-Port header which the Endpoint passes through.

Most other headers, including Host and Forwarded, are passed through with the request as-is so whatever the API gateway sets for these headers is what the application will receive. I recommend sending a request directly to the Endpoint and to the API gateway and comparing the two in order to see how they differ.

I don’t see any reason why this setup wouldn’t work. Are you running into issues?

Thank you Josh! That’s helpful.

If anyone else is wondering, I tested by sending a request to AWS API gateway using httpbin.org and these are the headers:

So it does not set X-Forwarded-* headers, only Forwarded.

Are you running into issues?

A little bit. The host part of the request we receive is not what we expected. But it looks now like it’s mostly an issue with how AWS API gw works. As you can see in the screenshot above, AWS modifies the Host header to the integration URL which is not what we want.

But I think we will be able to work around it now that we know how Aptible and AWS works.

That was not 100% accurate apparently. Adding ?show_env=1 to the httpbin.org request shows all AWS API gateway headers: