gpt4 book ai didi

go - 如何在 Go 服务器上处理预检 CORS 请求

转载 作者:IT老高 更新时间:2023-10-28 13:00:13 25 4
gpt4 key购买 nike

所以我在 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")

也许对这个问题的回答很简单:是的,这些是你的基本选择。但我认为可能有一些我不知道的最佳实践。

最佳答案

分离逻辑并重用您定义的 CORS 处理程序的一种简单方法是包装您的 REST 处理程序。例如,如果你使用 net/http 和 Handle 方法,你总是可以这样做:

func corsHandler(h http.Handler) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
if (r.Method == "OPTIONS") {
//handle preflight in here
} else {
h.ServeHTTP(w,r)
}
}
}

你可以这样包装:

http.Handle("/endpoint/", corsHandler(restHandler))

关于go - 如何在 Go 服务器上处理预检 CORS 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22972066/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com