如何解决如何使用 Gorilla 处理 DELETE 呼叫的预检请求?
我用 Gorilla Web Toolkit 编写了一个简单的 API,通过它的 handlers 处理 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
}
我的理由是,预检调用将使用 OPTIONS
,但它唯一感兴趣的是相关的 CORS 标头。
GET
和 POST
工作正常,JavaScript fetch()
调用通过正确的标头。
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
条目。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。