所以我在 Go 中编写了这个 RESTful 后端,它将被跨站点 HTTP 请求调用,即来自另一个站点提供的内容(实际上,只是另一个端口,但同源策略生效,所以我们在这里) .
在这种情况下,用户代理将在某些情况下发送预检 OPTIONS 请求以检查实际请求是否可以安全发送。
我的问题是如何在 Go 上下文中最好地处理和充分响应这些预检请求。我构想的方式感觉不是很优雅,我想知道是否还有其他我没有想到的方法。
使用标准net/http
包,我可以在处理函数 func 中检查请求方法,可能是这样的:
func AddResourceHandler(rw http.ResponseWriter, r *http.Request) {
switch r.Method {
case "OPTIONS":
// handle preflight
case "PUT":
// respond to actual request
}
}
我还可以使用Gorilla 的 mux
包,并为每个相关的 URL 路径注册一个预检“OPTIONS”处理程序。
r := mux.NewRouter()
r.HandleFunc("/someresource/item", AddResourceHandler).Methods("PUT")
r.HandleFunc("/someresource/item", PreflightAddResourceHandler).Methods("OPTIONS")
也许对这个问题的回答很简单:是的,这些是您的基本选择。但我认为可能有一些我不知道的最佳实践。