]> Cypherpunks repositories - gostls13.git/commitdiff
http: fix Content-Range and Content-Length in response
authorClement Skau <clementskau@gmail.com>
Wed, 19 Jan 2011 15:05:48 +0000 (10:05 -0500)
committerRuss Cox <rsc@golang.org>
Wed, 19 Jan 2011 15:05:48 +0000 (10:05 -0500)
RFC2616 sections 4.4 and 14.16:
  * Cannot use Content-Length with non-identity Transfer-Encoding
  * Content-Range response is "bytes x-y/z" not "x-y/z"

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

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

index b3cae19a50d2999be4b6137792b657ad0ecd7ac6..bbfa58d264d77c10ec132a7633a1af649b7980fe 100644 (file)
@@ -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")
index 0f71356926c4a38bc3617b0bfa21a3d3657c7af9..0a5636b88d1ac4d8205bb04805b3bd338835613e 100644 (file)
@@ -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 = ""
                }
index 2ecdd5ee258b05046a5f3b5c11a49263b311218f..644724f58e6cc2d3388c4db86c704ea2725d2c8a 100644 (file)
@@ -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
        }