]> Cypherpunks repositories - gostls13.git/commitdiff
net/http: revert header changes in Error
authorRuss Cox <rsc@golang.org>
Fri, 15 Mar 2024 16:56:05 +0000 (12:56 -0400)
committerRuss Cox <rsc@golang.org>
Fri, 15 Mar 2024 17:26:18 +0000 (17:26 +0000)
This reverts CL 544019 and CL 569815, because they break a variety
of tests inside Google that do not expect the Cache-Control header
to be set to no-cache.

A followup CL will add this functionality back after a proposal.

For #50905.

Change-Id: Ie377bfb72ce2c77d11bf31f9617ab6db342a408a
Reviewed-on: https://go-review.googlesource.com/c/go/+/571975
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Cherry Mui <cherryyz@google.com>
Reviewed-by: Michael Knyszek <mknyszek@google.com>
src/net/http/fs_test.go
src/net/http/server.go

index 4891c28768ca611c0421f4df653d11cb3f9aa6f6..70a4b8982f4fe454461521c30e3ef3ddcbfbaa36 100644 (file)
@@ -27,7 +27,6 @@ import (
        "reflect"
        "regexp"
        "runtime"
-       "strconv"
        "strings"
        "testing"
        "testing/fstest"
@@ -1695,64 +1694,3 @@ func testFileServerDirWithRootFile(t *testing.T, mode testMode) {
                testDirFile(t, FileServerFS(os.DirFS("testdata/index.html")))
        })
 }
-
-func TestServeContentHeadersWithError(t *testing.T) {
-       contents := []byte("content")
-       ts := newClientServerTest(t, http1Mode, HandlerFunc(func(w ResponseWriter, r *Request) {
-               w.Header().Set("Content-Type", "application/octet-stream")
-               w.Header().Set("Content-Length", strconv.Itoa(len(contents)))
-               w.Header().Set("Content-Encoding", "gzip")
-               w.Header().Set("Etag", `"abcdefgh"`)
-               w.Header().Set("Last-Modified", "Wed, 21 Oct 2015 07:28:00 GMT")
-               w.Header().Set("Cache-Control", "immutable")
-               w.Header().Set("Other-Header", "test")
-               ServeContent(w, r, "", time.Time{}, bytes.NewReader(contents))
-       })).ts
-       defer ts.Close()
-
-       req, err := NewRequest("GET", ts.URL, nil)
-       if err != nil {
-               t.Fatal(err)
-       }
-       req.Header.Set("Range", "bytes=100-10000")
-
-       c := ts.Client()
-       res, err := c.Do(req)
-       if err != nil {
-               t.Fatal(err)
-       }
-
-       out, _ := io.ReadAll(res.Body)
-       res.Body.Close()
-
-       if g, e := res.StatusCode, 416; g != e {
-               t.Errorf("got status = %d; want %d", g, e)
-       }
-       if g, e := string(out), "invalid range: failed to overlap\n"; g != e {
-               t.Errorf("got body = %q; want %q", g, e)
-       }
-       if g, e := res.Header.Get("Content-Type"), "text/plain; charset=utf-8"; g != e {
-               t.Errorf("got content-type = %q, want %q", g, e)
-       }
-       if g, e := res.Header.Get("Content-Length"), strconv.Itoa(len(out)); g != e {
-               t.Errorf("got content-length = %q, want %q", g, e)
-       }
-       if g, e := res.Header.Get("Content-Encoding"), ""; g != e {
-               t.Errorf("got content-encoding = %q, want %q", g, e)
-       }
-       if g, e := res.Header.Get("Etag"), ""; g != e {
-               t.Errorf("got etag = %q, want %q", g, e)
-       }
-       if g, e := res.Header.Get("Last-Modified"), ""; g != e {
-               t.Errorf("got last-modified = %q, want %q", g, e)
-       }
-       if g, e := res.Header.Get("Cache-Control"), "no-cache"; g != e {
-               t.Errorf("got cache-control = %q, want %q", g, e)
-       }
-       if g, e := res.Header.Get("Content-Range"), "bytes */7"; g != e {
-               t.Errorf("got content-range = %q, want %q", g, e)
-       }
-       if g, e := res.Header.Get("Other-Header"), "test"; g != e {
-               t.Errorf("got other-header = %q, want %q", g, e)
-       }
-}
index 99c6d4fd0a09c54c96d6a623482069487a53dfea..648695ca1a99111561fbf6e955ca69ad2f5a67c6 100644 (file)
@@ -2173,22 +2173,9 @@ func (f HandlerFunc) ServeHTTP(w ResponseWriter, r *Request) {
 // writes are done to w.
 // The error message should be plain text.
 func Error(w ResponseWriter, error string, code int) {
-       h := w.Header()
-       // We delete headers which might be valid for some other content,
-       // but not anymore for the error content.
-       h.Del("Content-Length")
-       h.Del("Content-Encoding")
-       h.Del("Etag")
-       h.Del("Last-Modified")
-       // There might be cache control headers set for some other content,
-       // but we reset it to no-cache for the error content if presents.
-       if h.has("Cache-Control") {
-               h.Set("Cache-Control", "no-cache")
-       }
-       // There might be content type already set, but we reset it to
-       // text/plain for the error message.
-       h.Set("Content-Type", "text/plain; charset=utf-8")
-       h.Set("X-Content-Type-Options", "nosniff")
+       w.Header().Del("Content-Length")
+       w.Header().Set("Content-Type", "text/plain; charset=utf-8")
+       w.Header().Set("X-Content-Type-Options", "nosniff")
        w.WriteHeader(code)
        fmt.Fprintln(w, error)
 }