diff --git a/gateway/handlers/forwarding_proxy.go b/gateway/handlers/forwarding_proxy.go index 757b2ce40031606b8dd16bccb22d9c2495474eeb..3ec96b90611ab58946568ce6807368e7cb06e051 100644 --- a/gateway/handlers/forwarding_proxy.go +++ b/gateway/handlers/forwarding_proxy.go @@ -53,6 +53,9 @@ func buildUpstreamRequest(r *http.Request, url string) *http.Request { } upstreamReq, _ := http.NewRequest(r.Method, url, nil) + if len(r.Host) > 0 { + upstreamReq.Host = r.Host + } copyHeaders(upstreamReq.Header, &r.Header) upstreamReq.Header["X-Forwarded-For"] = []string{r.RemoteAddr} diff --git a/gateway/handlers/forwarding_proxy_test.go b/gateway/handlers/forwarding_proxy_test.go index aaef9b9617c65295375e14cf77093081fcb54cb5..4c314cfda4ba4f2816f03be6fba8fb14b17f72f6 100644 --- a/gateway/handlers/forwarding_proxy_test.go +++ b/gateway/handlers/forwarding_proxy_test.go @@ -68,6 +68,40 @@ func Test_buildUpstreamRequest_NoBody_GetMethod_NoQuery(t *testing.T) { } +func Test_buildUpstreamRequest_HasHostHeaderWhenSet(t *testing.T) { + srcBytes := []byte("hello world") + + reader := bytes.NewReader(srcBytes) + request, err := http.NewRequest(http.MethodPost, "http://gateway/function?code=1", reader) + + if err != nil { + t.Fatal(err) + } + + upstream := buildUpstreamRequest(request, "/") + + if request.Host != upstream.Host { + t.Errorf("Host - want: %s, got: %s", request.Host, upstream.Host) + } +} + +func Test_buildUpstreamRequest_HostHeader_Empty_WhenNotSet(t *testing.T) { + srcBytes := []byte("hello world") + + reader := bytes.NewReader(srcBytes) + request, err := http.NewRequest(http.MethodPost, "/function", reader) + + if err != nil { + t.Fatal(err) + } + + upstream := buildUpstreamRequest(request, "/") + + if request.Host != upstream.Host { + t.Errorf("Host - want: %s, got: %s", request.Host, upstream.Host) + } +} + func Test_getServiceName(t *testing.T) { scenarios := []struct { name string