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
属性,但我不知道该怎么做?
答案 0 :(得分:9)
我想禁用此行为并自行处理所有路径。
我是Go新手,似乎我可以创建自己的Server实例并覆盖Handler属性,但我不确定如何操作?
不要通过http.DefaultServeMux
或http.Handle
方法使用http.HandleFunc
注册处理程序,而只需调用:
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...
}