我用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头。
GET
和POST
工作正常,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
条目。