【发布时间】:2014-05-23 05:12:24
【问题描述】:
所以我在 Go 中编写了这个 RESTful 后端,它将通过跨站点 HTTP 请求调用,即来自另一个站点提供的内容(实际上,只是另一个端口,但同源策略生效,所以在这里我们是)。
在这种情况下,在某些情况下,用户代理会发送预检 OPTIONS 请求以检查实际请求是否可以安全发送。
我的问题是如何在 Go 上下文中最好地处理和充分响应这些预检请求。我构思的方式感觉不是很优雅,我想知道是否还有其他我没有想到的方法。
使用标准的net/http包,我可以在handler func中查看请求方法,大概是这样的:
func AddResourceHandler(rw http.ResponseWriter, r *http.Request) {
switch r.Method {
case "OPTIONS":
// handle preflight
case "PUT":
// respond to actual request
}
}
我还可以使用Gorilla's mux 包,并为每个相关的 URL 路径注册一个预检“OPTIONS”处理程序。
r := mux.NewRouter()
r.HandleFunc("/someresource/item", AddResourceHandler).Methods("PUT")
r.HandleFunc("/someresource/item", PreflightAddResourceHandler).Methods("OPTIONS")
也许对这个问题的回答很简单:是的,这些是你的基本选择。但我认为可能有一些我不知道的最佳实践。
【问题讨论】:
-
是的,这些是您的基本选择 :) 了解您还期待什么会有所帮助 - 例如,是否有其他语言可以完全不同地处理它?
-
啊!添加一个预检处理程序——非常感谢你发布这个!正是我需要的。