go - 如何使用 gorilla 处理程序允许移动设备上的 OPTIONS 方法?

标签 go gorilla

需要接受来自移动设备的OPTIONS方法, 尝试了多种方法来做到这一点并得到奇怪的行为:

尝试此操作时,我从客户端收到 403: (客户端在 POST 之前发送 OPTIONS)

  import (
    "net/http"

    "github.com/gorilla/handlers"
    "github.com/gorilla/mux"
)

func main() {
    r := mux.NewRouter()
    r.HandleFunc("/users", UserEndpoint)
    r.HandleFunc("/projects", ProjectEndpoint)

    methods := handlers.AllowedMethods([]string{"OPTIONS", "DELETE", "GET", "HEAD", "POST"}

    http.ListenAndServe(":8000", handlers.CORS(methods)(r))
}

如果我省略方法:

        http.ListenAndServe(":8000", handlers.CORS()(r))

我收到 403 未授权

也尝试过,删除了 GET 方法:

methods := handlers.AllowedMethods([]string{"OPTIONS"}

http.ListenAndServe(":8000", handlers.CORS(methods)(r))

但是还是可以的 从浏览器中的其余客户端尝试时获得 200 GET (chromes DHC)

但是如果我删除OPTIONS:

methods := handlers.AllowedMethods([]string{"DELETE", "GET", "HEAD", "POST"}

http.ListenAndServe(":8000", handlers.CORS(methods)(r))

我得到 405

第一个示例基于 Gorilla 处理程序文档

关于这个问题有什么想法吗?

谢谢

最佳答案

您确实需要了解所提出的请求,但我遇到了类似的问题并通过以下方式解决了它:

handlers.CORS(
        handlers.AllowedOrigins([]string{"*"}),
        handlers.AllowedMethods([]string{"POST"}),
        handlers.AllowedHeaders([]string{"Content-Type", "X-Requested-With"}),
    )(router)

我需要提出的请求(模仿预检)是:

curl -H "Origin: http://example.com" \
-H "Access-Control-Request-Method: POST" \
-H "Access-Control-Request-Headers: X-Requested-With" \
-X OPTIONS --verbose http://127.0.0.1:8080/products

这确实是 AllowedHeaders 函数造成了所有的不同。添加后,403 错误就消失了。

关于go - 如何使用 gorilla 处理程序允许移动设备上的 OPTIONS 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38376226/

相关文章:

go - pprof 配置文件与 julienschmidtrouter 和基准测试不分析处理程序

go - Golang 中的广播()

go - revel 依赖注入(inject)

go - negroni/gorilla mux 的子路由器问题

go - 如何从 gorilla 商店中删除用户 session ?

go - 为什么我的 channel 需要缓冲区?

regex - 转到正则表达式通配符以获取没有周围文本的标签

http - 如何在 Golang 路由中传递 URL 作为参数?

http - Gorilla mux, 'catch' 响应代码的最佳方式

go - 成功的websocket连接后如何使发送消息到特定的URL?