http: ServeFile shouldn't send Content-Length when Content-Encoding is set

Fixes #1905

R=rsc
CC=golang-dev
https://golang.org/cl/4538111
diff --git a/src/pkg/http/fs.go b/src/pkg/http/fs.go
index 17d5297..28a0c51 100644
--- a/src/pkg/http/fs.go
+++ b/src/pkg/http/fs.go
@@ -175,7 +175,9 @@
 	}
 
 	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)
 
diff --git a/src/pkg/http/fs_test.go b/src/pkg/http/fs_test.go
index b941962..5540534 100644
--- a/src/pkg/http/fs_test.go
+++ b/src/pkg/http/fs_test.go
@@ -101,7 +101,7 @@
 			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 @@
 	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 {