Skip to content
Snippets Groups Projects
Commit d9c2d013 authored by Will McCutchen's avatar Will McCutchen
Browse files

Fix handling of HEAD requests for streaming responses

parent c429c2d3
No related branches found
No related tags found
No related merge requests found
...@@ -1604,6 +1604,29 @@ func TestDrip(t *testing.T) { ...@@ -1604,6 +1604,29 @@ func TestDrip(t *testing.T) {
assertStatusCode(t, w, test.code) assertStatusCode(t, w, test.code)
}) })
} }
t.Run("ensure HEAD request works with streaming responses", func(t *testing.T) {
srv := httptest.NewServer(handler)
defer srv.Close()
resp, err := http.Head(srv.URL + "/drip?duration=900ms&delay=100ms")
if err != nil {
t.Fatalf("unexpected error: %s", err)
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
t.Fatalf("error reading response body: %s", err)
}
if resp.StatusCode != http.StatusOK {
t.Fatalf("expected HTTP 200 OK rsponse, got %d", resp.StatusCode)
}
if bodySize := len(body); bodySize > 0 {
t.Fatalf("expected empty body from HEAD request, bot: %s", string(body))
}
})
} }
func TestRange(t *testing.T) { func TestRange(t *testing.T) {
......
...@@ -61,7 +61,7 @@ func limitRequestSize(maxSize int64, h http.Handler) http.Handler { ...@@ -61,7 +61,7 @@ func limitRequestSize(maxSize int64, h http.Handler) http.Handler {
// headResponseWriter implements http.ResponseWriter in order to discard the // headResponseWriter implements http.ResponseWriter in order to discard the
// body of the response // body of the response
type headResponseWriter struct { type headResponseWriter struct {
http.ResponseWriter *metaResponseWriter
} }
func (hw *headResponseWriter) Write(b []byte) (int, error) { func (hw *headResponseWriter) Write(b []byte) (int, error) {
...@@ -72,7 +72,7 @@ func (hw *headResponseWriter) Write(b []byte) (int, error) { ...@@ -72,7 +72,7 @@ func (hw *headResponseWriter) Write(b []byte) (int, error) {
func autohead(h http.Handler) http.Handler { func autohead(h http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
if r.Method == "HEAD" { if r.Method == "HEAD" {
w = &headResponseWriter{w} w = &headResponseWriter{&metaResponseWriter{w: w}}
} }
h.ServeHTTP(w, r) h.ServeHTTP(w, r)
}) })
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment