Skip to content

Commit

Permalink
fix: custom Host header.
Browse files Browse the repository at this point in the history
  • Loading branch information
ldez committed Mar 17, 2020
1 parent 668e6fd commit 09224e4
Show file tree
Hide file tree
Showing 2 changed files with 51 additions and 2 deletions.
9 changes: 7 additions & 2 deletions pkg/middlewares/headers/headers.go
Original file line number Diff line number Diff line change
Expand Up @@ -165,9 +165,14 @@ func (s *Header) ServeHTTP(rw http.ResponseWriter, req *http.Request) {
func (s *Header) modifyCustomRequestHeaders(req *http.Request) {
// Loop through Custom request headers
for header, value := range s.headers.CustomRequestHeaders {
if value == "" {
switch {
case value == "":
req.Header.Del(header)
} else {

case strings.EqualFold(header, "Host"):
req.Host = value

default:
req.Header.Set(header, value)
}
}
Expand Down
44 changes: 44 additions & 0 deletions pkg/middlewares/headers/headers_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,50 @@ func TestCustomRequestHeader(t *testing.T) {
assert.Equal(t, "test_request", req.Header.Get("X-Custom-Request-Header"))
}

func TestCustomRequestHeader_Host(t *testing.T) {
emptyHandler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})

testCases := []struct {
desc string
customHeaders map[string]string
expectedHost string
expectedURLHost string
}{
{
desc: "standard Host header",
customHeaders: map[string]string{},
expectedHost: "example.org",
expectedURLHost: "example.org",
},
{
desc: "custom Host header",
customHeaders: map[string]string{
"Host": "example.com",
},
expectedHost: "example.com",
expectedURLHost: "example.org",
},
}

for _, test := range testCases {
t.Run(test.desc, func(t *testing.T) {
header := NewHeader(emptyHandler, dynamic.Headers{
CustomRequestHeaders: test.customHeaders,
})

res := httptest.NewRecorder()
req, err := http.NewRequest(http.MethodGet, "http://example.org/foo", nil)
require.NoError(t, err)

header.ServeHTTP(res, req)

assert.Equal(t, http.StatusOK, res.Code)
assert.Equal(t, test.expectedHost, req.Host)
assert.Equal(t, test.expectedURLHost, req.URL.Host)
})
}
}

func TestCustomRequestHeaderEmptyValue(t *testing.T) {
emptyHandler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})

Expand Down

0 comments on commit 09224e4

Please sign in to comment.