Is there an existing issue for this?
Current Behavior
Although method names are case-sensitive, Gorilla's CORS middleware takes the non-standard approach of normalising method names by uppercasing them. Such unwarranted case normalisation causes problems for clients that send requests whose method is not uppercase—and not some case-insensitive match for one of DELETE, GET, HEAD, OPTIONS, POST, or PUT, names for which the Fetch standard carves out an exception.
Expected Behavior
Gorilla should not normalise the case of allowed method names.
Steps To Reproduce
Here is a (failing) test case that illustrates the problem:
func TestHandlePreflightLowercaseAllowedMethod(t *testing.T) {
const (
origin = "https://foo.com"
method = "patch"
)
req, _ := http.NewRequest(http.MethodOptions, "http://example.com/foo", nil)
req.Header.Add("Origin", origin)
req.Header.Add("Access-Control-Request-Method", method)
rr := httptest.NewRecorder()
testHandler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {})
cors := CORS(
AllowedOrigins([]string{origin}),
AllowedMethods([]string{method}),
)
cors(testHandler).ServeHTTP(rr, req)
resp := rr.Result()
if got, want := resp.StatusCode, http.StatusOK; got != want {
t.Errorf("bad status: got %v want %v", got, want)
}
header := resp.Header.Get(corsAllowMethodsHeader)
if got, want := header, method; got != want {
t.Errorf("bad header: expected %q method header, got %q", want, got)
}
}
Current result:
$ go test -run ^TestHandlePreflightLowercaseAllowedMethod$ github.com/gorilla/handlers
--- FAIL: TestHandlePreflightLowercaseAllowedMethod (0.00s)
cors_test.go:210: bad status: got 405 want 200
cors_test.go:215: bad header: expected "patch" method header, got ""
FAIL
FAIL github.com/gorilla/handlers 0.790s
FAIL
Anything else?
More about this topic in one of my recent blog posts.
Is there an existing issue for this?
Current Behavior
Although method names are case-sensitive, Gorilla's CORS middleware takes the non-standard approach of normalising method names by uppercasing them. Such unwarranted case normalisation causes problems for clients that send requests whose method is not uppercase—and not some case-insensitive match for one of
DELETE,GET,HEAD,OPTIONS,POST, orPUT, names for which the Fetch standard carves out an exception.Expected Behavior
Gorilla should not normalise the case of allowed method names.
Steps To Reproduce
Here is a (failing) test case that illustrates the problem:
Current result:
Anything else?
More about this topic in one of my recent blog posts.