]> Cypherpunks.ru repositories - gostls13.git/commitdiff
Revert "net/http: FileServer method check + minimal OPTIONS implementation"
authorDamien Neil <dneil@google.com>
Wed, 5 Apr 2023 17:19:44 +0000 (10:19 -0700)
committerDamien Neil <dneil@google.com>
Thu, 6 Apr 2023 17:39:06 +0000 (17:39 +0000)
This reverts https://go.dev/cl/413554

Reason for revert: Backwards-incompatible change in behavior.

For #53501
For #59375

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>

src/net/http/fs.go
src/net/http/fs_test.go

index 7f302491aba0d591aadaf0f50ca01770d0b9bca3..55094400ac7f2ee68dfa7aeb0a522b68c31e3c26 100644 (file)
@@ -863,22 +863,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 ce42920123def2d398c21b1cf8718c138ff47391..e5fb52f3bb8ba674e917f8cf634e5fb952d701aa 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")