【问题标题】:Overriding Go's default HTTP Sever redirect behaviour覆盖 Go 的默认 HTTP Server 重定向行为
【发布时间】:2013-05-29 02:31:01
【问题描述】:

Go 的默认 HTTP 服务器实现在 HTTP 请求中合并斜杠,将 HTTP 重定向响应返回到“清理”路径:

https://code.google.com/p/go/source/browse/src/pkg/net/http/server.go#1420

因此,如果您发出 HTTP 请求 GET /http://foo.com/,服务器将响应 301 Moved Permanently ... Location: /http:/foo.com/

我想禁用此行为并自己处理所有路径。

我是 Go 新手,似乎可以创建自己的 Server 实例并覆盖 Handler 属性,但我不知道该怎么做?

【问题讨论】:

    标签: http go


    【解决方案1】:

    我想禁用此行为并自己处理所有路径。

    我是 Go 新手,似乎可以创建自己的 Server 实例并覆盖 Handler 属性,但我不知道该怎么做?

    无需通过http.Handlehttp.HandleFunc 方法向http.DefaultServeMux 注册处理程序,只需调用:

    http.ListenAndServe(":8080", MyHandler)
    

    其中MyHandler 是实现http.Handler 接口的类型的实例。

    http.ListenAndServe 反过来只是一种速记方法,它执行以下操作:

    func ListenAndServe(addr string, handler http.Handler) error {
        server := &http.Server{Addr: addr, Handler: handler}
        return server.ListenAndServe()
    }
    

    所以你也可以直接这样做。

    在您的处理程序中,您可以按照自己的意愿解析/路由 URI:

    func (h *MyHandlerType) ServeHTTP(w http.ResponseWriter, r *http.Request) {
        uri := r.URL.Path
        // ...use uri...
    }
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-18
    • 2013-03-10
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多