]> Cypherpunks repositories - gostls13.git/commitdiff
http: ServeFile shouldn't send Content-Length when Content-Encoding is set
authorBrad Fitzpatrick <bradfitz@golang.org>
Thu, 2 Jun 2011 20:36:52 +0000 (13:36 -0700)
committerBrad Fitzpatrick <bradfitz@golang.org>
Thu, 2 Jun 2011 20:36:52 +0000 (13:36 -0700)
Fixes #1905

R=rsc
CC=golang-dev
https://golang.org/cl/4538111

src/pkg/http/fs.go
src/pkg/http/fs_test.go

index 17d5297b82c86614d849a7d9ef33b3a8b13b2c4e..28a0c51ef5b9c6d1fcd6bda042c7188df9e7d557 100644 (file)
@@ -175,7 +175,9 @@ func serveFile(w ResponseWriter, r *Request, name string, redirect bool) {
        }
 
        w.Header().Set("Accept-Ranges", "bytes")
-       w.Header().Set("Content-Length", strconv.Itoa64(size))
+       if w.Header().Get("Content-Encoding") == "" {
+               w.Header().Set("Content-Length", strconv.Itoa64(size))
+       }
 
        w.WriteHeader(code)
 
index b94196258ee8dc1f204124abfa0a42365175ded9..554053449ecbd57cb9788f438a3c4984b6729a73 100644 (file)
@@ -101,7 +101,7 @@ func TestServeFileContentType(t *testing.T) {
                        t.Fatal(err)
                }
                if h := resp.Header.Get("Content-Type"); h != want {
-                       t.Errorf("Content-Type mismatch: got %q, want %q", h, want)
+                       t.Errorf("Content-Type mismatch: got %d, want %d", h, want)
                }
        }
        get("text/plain; charset=utf-8")
@@ -109,6 +109,21 @@ func TestServeFileContentType(t *testing.T) {
        get(ctype)
 }
 
+func TestServeFileWithContentEncoding(t *testing.T) {
+       ts := httptest.NewServer(HandlerFunc(func(w ResponseWriter, r *Request) {
+               w.Header().Set("Content-Encoding", "foo")
+               ServeFile(w, r, "testdata/file")
+       }))
+       defer ts.Close()
+       resp, err := Get(ts.URL)
+       if err != nil {
+               t.Fatal(err)
+       }
+       if g, e := resp.ContentLength, int64(-1); g != e {
+               t.Errorf("Content-Length mismatch: got %q, want %q", g, e)
+       }
+}
+
 func getBody(t *testing.T, req Request) (*Response, []byte) {
        r, err := DefaultClient.Do(&req)
        if err != nil {