]> Cypherpunks.ru repositories - gostls13.git/commitdiff
[release-branch.go1.20] Revert "net/http: FileServer method check + minimal OPTIONS...
authorDamien Neil <dneil@google.com>
Wed, 5 Apr 2023 17:19:44 +0000 (10:19 -0700)
committerGopher Robot <gobot@golang.org>
Tue, 25 Apr 2023 15:50:56 +0000 (15:50 +0000)
This reverts https://go.dev/cl/413554

Reason for revert: Backwards-incompatible change in behavior.

For #53501
For #59375
Fixes #59469

Change-Id: Ic3f63b378f9c819599b32e5e6e410f6163849317
Reviewed-on: https://go-review.googlesource.com/c/go/+/482635
Reviewed-by: Tatiana Bradley <tatianabradley@google.com>
Run-TryBot: Damien Neil <dneil@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
(cherry picked from commit c02fa75086dbc6db0d90f477e7b4c839140fdeb2)
Reviewed-on: https://go-review.googlesource.com/c/go/+/488635
Reviewed-by: Dmitri Shuralyov <dmitshur@google.com>
Auto-Submit: Dmitri Shuralyov <dmitshur@google.com>
Reviewed-by: Dmitri Shuralyov <dmitshur@golang.org>
src/net/http/fs.go
src/net/http/fs_test.go

index 83459046bf76eab7e1c487b4e6c59de36902d6ed..41e0b43ac819bfdc22e78079fadaa6aa26813214 100644 (file)
@@ -858,22 +858,12 @@ func FileServer(root FileSystem) Handler {
 }
 
 func (f *fileHandler) ServeHTTP(w ResponseWriter, r *Request) {
-       const options = MethodOptions + ", " + MethodGet + ", " + MethodHead
-
-       switch r.Method {
-       case MethodGet, MethodHead:
-               if !strings.HasPrefix(r.URL.Path, "/") {
-                       r.URL.Path = "/" + r.URL.Path
-               }
-               serveFile(w, r, f.root, path.Clean(r.URL.Path), true)
-
-       case MethodOptions:
-               w.Header().Set("Allow", options)
-
-       default:
-               w.Header().Set("Allow", options)
-               Error(w, "read-only", StatusMethodNotAllowed)
+       upath := r.URL.Path
+       if !strings.HasPrefix(upath, "/") {
+               upath = "/" + upath
+               r.URL.Path = upath
        }
+       serveFile(w, r, f.root, path.Clean(upath), true)
 }
 
 // httpRange specifies the byte range to be sent to the client.
index 74f7a80e279e53def134a268d405613ba3a9a3c3..e25a580b1fada446b4d672c8d94aa778afcc3e79 100644 (file)
@@ -24,7 +24,6 @@ import (
        "reflect"
        "regexp"
        "runtime"
-       "sort"
        "strings"
        "testing"
        "time"
@@ -420,46 +419,6 @@ func testFileServerImplicitLeadingSlash(t *testing.T, mode testMode) {
        }
 }
 
-func TestFileServerMethodOptions(t *testing.T) { run(t, testFileServerMethodOptions) }
-func testFileServerMethodOptions(t *testing.T, mode testMode) {
-       const want = "GET, HEAD, OPTIONS"
-       ts := newClientServerTest(t, mode, FileServer(Dir("."))).ts
-
-       tests := []struct {
-               method     string
-               wantStatus int
-       }{
-               {MethodOptions, StatusOK},
-
-               {MethodDelete, StatusMethodNotAllowed},
-               {MethodPut, StatusMethodNotAllowed},
-               {MethodPost, StatusMethodNotAllowed},
-       }
-
-       for _, test := range tests {
-               req, err := NewRequest(test.method, ts.URL, nil)
-               if err != nil {
-                       t.Fatal(err)
-               }
-               res, err := ts.Client().Do(req)
-               if err != nil {
-                       t.Fatal(err)
-               }
-               defer res.Body.Close()
-
-               if res.StatusCode != test.wantStatus {
-                       t.Errorf("%s got status %q, want code %d", test.method, res.Status, test.wantStatus)
-               }
-
-               a := strings.Split(res.Header.Get("Allow"), ", ")
-               sort.Strings(a)
-               got := strings.Join(a, ", ")
-               if got != want {
-                       t.Errorf("%s got Allow header %q, want %q", test.method, got, want)
-               }
-       }
-}
-
 func TestDirJoin(t *testing.T) {
        if runtime.GOOS == "windows" {
                t.Skip("skipping test on windows")