如何使用 Gorilla 处理 DELETE 调用的预检请求?
How to handle Preflight requests for DELETE calls with Gorilla?
我用 Gorilla Web Toolkit, handling the CORS answers through its handlers:
写了一个简单的 API
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 headers.
GET
和 POST
工作正常,JavaScript fetch()
调用通过正确的 headers.
DELETE
但是在 Preflight 调用中失败:Chrome DevTools 指出 DELETE + Preflight
调用失败 CORS error
,下一行是 Preflight OPTIONS
调用失败并显示 405(“方法不允许”)
为什么在处理方法时会出现这个错误?以及如何修复它?
我通过更新 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
条目。
我用 Gorilla Web Toolkit, handling the CORS answers through its handlers:
写了一个简单的 APIr := 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 headers.
GET
和 POST
工作正常,JavaScript fetch()
调用通过正确的 headers.
DELETE
但是在 Preflight 调用中失败:Chrome DevTools 指出 DELETE + Preflight
调用失败 CORS error
,下一行是 Preflight OPTIONS
调用失败并显示 405(“方法不允许”)
为什么在处理方法时会出现这个错误?以及如何修复它?
我通过更新 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
条目。