From 2873e12a31354e53ce5ee8958c50fe2c9e0751f3 Mon Sep 17 00:00:00 2001 From: SALLEYRON Julien Date: Thu, 29 Nov 2018 15:44:54 +0100 Subject: [PATCH 1/2] Flush when we have unannonced trailers --- forward/fwd.go | 10 ++++++++++ forward/fwd_test.go | 23 +++++++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/forward/fwd.go b/forward/fwd.go index 5eca0a4a..f70ba324 100644 --- a/forward/fwd.go +++ b/forward/fwd.go @@ -548,6 +548,16 @@ func (f *httpForwarder) serveHTTP(w http.ResponseWriter, inReq *http.Request, ct } else { revproxy.ServeHTTP(w, outReq) } + + for key := range w.Header() { + if strings.HasPrefix(key, http.TrailerPrefix) { + if fl, ok := w.(http.Flusher); ok { + fl.Flush() + } + break + } + } + } // IsWebsocketRequest determines if the specified HTTP request is a diff --git a/forward/fwd_test.go b/forward/fwd_test.go index fca206ac..17c95382 100644 --- a/forward/fwd_test.go +++ b/forward/fwd_test.go @@ -3,6 +3,7 @@ package forward import ( "context" "fmt" + "io/ioutil" "net/http" "net/http/httptest" "net/url" @@ -409,3 +410,25 @@ func TestTeTrailer(t *testing.T) { assert.Equal(t, http.StatusOK, re.StatusCode) assert.Equal(t, "trailers", teHeader) } + +func TestUnannouncedTrailer(t *testing.T) { + srv := httptest.NewServer(http.HandlerFunc(func(rw http.ResponseWriter, req *http.Request) { + rw.WriteHeader(200) + rw.(http.Flusher).Flush() + + rw.Header().Add(http.TrailerPrefix+"X-Trailer", "foo") + })) + + proxy, err := New() + require.Nil(t, err) + + proxySrv := httptest.NewServer(http.HandlerFunc(func(rw http.ResponseWriter, req *http.Request) { + req.URL = testutils.ParseURI(srv.URL) + proxy.ServeHTTP(rw, req) + })) + + resp, _ := http.Get(proxySrv.URL) + ioutil.ReadAll(resp.Body) + + require.Equal(t, resp.Trailer.Get("X-Trailer"), "foo") +} From e672f46a33a334ee8b68086f2fd31b6a1288c409 Mon Sep 17 00:00:00 2001 From: SALLEYRON Julien Date: Thu, 29 Nov 2018 16:04:33 +0100 Subject: [PATCH 2/2] Remove 1.8, not supported in golint anymore --- .travis.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 6222e9f8..8713d6cc 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,7 +1,6 @@ language: go go: - - 1.8.x - 1.9.x - 1.10.x - 1.11.x