如何使用Gorilla处理DELETE呼叫的Preflight请求



我用Gorilla Web工具包编写了一个简单的API,通过它的处理程序处理CORS答案:

r := mux.NewRouter()
r.HandleFunc("/api/note", readHandler).Methods("GET")
r.HandleFunc("/api/note", writeHandler).Methods("POST")
r.HandleFunc("/api/note", deleteHandler).Methods("DELETE")
r.HandleFunc("/api/note", optionsHandler).Methods("OPTIONS")

optionsHandler是

func optionsHandler(_ http.ResponseWriter, _ *http.Request) {
return
}

我的基本原理是Preflight调用将使用OPTIONS,但它唯一感兴趣的是相关的CORS头。

GETPOST工作正常,JavaScriptfetch()调用会使用正确的头。

然而,DELETE在Preflight调用上失败:Chrome DevTools声明DELETE + Preflight调用在CORS error上失败,下一行是PreflightOPTIONS调用在405("Method Not Allowed"(上失败

为什么在处理该方法时会出现此错误?如何修复

我通过更新CORS()调用修复了这个问题:

methods := handlers.AllowedMethods([]string{"OPTIONS", "DELETE", "GET", "HEAD", "POST", "PUT", "PATCH"})
origins := handlers.AllowedOrigins([]string{"*"})
headers := handlers.AllowedHeaders([]string{"Content-Type"})
log.Fatal(http.ListenAndServe("127.0.0.42:80", handlers.CORS(methods, origins, headers)(r)))

我认为(但我不确定(实际修复调用的是headers条目。

最新更新