diff --git a/src/pkg/http/fs.go b/src/pkg/http/fs.go index b3cae19a50d..bbfa58d264d 100644 --- a/src/pkg/http/fs.go +++ b/src/pkg/http/fs.go @@ -166,7 +166,7 @@ func serveFile(w ResponseWriter, r *Request, name string, redirect bool) { } size = ra.length code = StatusPartialContent - w.SetHeader("Content-Range", fmt.Sprintf("%d-%d/%d", ra.start, ra.start+ra.length, d.Size)) + w.SetHeader("Content-Range", fmt.Sprintf("bytes %d-%d/%d", ra.start, ra.start+ra.length-1, d.Size)) } w.SetHeader("Accept-Ranges", "bytes") diff --git a/src/pkg/http/fs_test.go b/src/pkg/http/fs_test.go index 0f71356926c..0a5636b88d1 100644 --- a/src/pkg/http/fs_test.go +++ b/src/pkg/http/fs_test.go @@ -134,7 +134,7 @@ func TestServeFile(t *testing.T) { if rt.code == StatusRequestedRangeNotSatisfiable { continue } - h := fmt.Sprintf("%d-%d/%d", rt.start, rt.end, testFileLength) + h := fmt.Sprintf("bytes %d-%d/%d", rt.start, rt.end-1, testFileLength) if rt.r == "" { h = "" } diff --git a/src/pkg/http/server.go b/src/pkg/http/server.go index 2ecdd5ee258..644724f58e6 100644 --- a/src/pkg/http/server.go +++ b/src/pkg/http/server.go @@ -229,6 +229,10 @@ func (w *response) WriteHeader(code int) { w.header["Transfer-Encoding"] = "", false w.chunking = false } + // Cannot use Content-Length with non-identity Transfer-Encoding. + if w.chunking { + w.header["Content-Length"] = "", false + } if !w.req.ProtoAtLeast(1, 0) { return }