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
属性,但我不确定如何?
我想禁用此行为并自行处理所有路径.
我是Go新手,似乎我可以创建自己的Server实例并覆盖Handler属性,但我不确定如何?
而不是http.DefaultServeMux
通过http.Handle
或http.HandleFunc
方法注册处理程序只需调用:
http.ListenAndServe(":8080", MyHandler)
Run Code Online (Sandbox Code Playgroud)
where MyHandler
是实现http.Handler
接口的类型的实例.
http.ListenAndServe
反过来只是一个执行以下操作的简便方法:
func ListenAndServe(addr string, handler http.Handler) error {
server := &http.Server{Addr: addr, Handler: handler}
return server.ListenAndServe()
}
Run Code Online (Sandbox Code Playgroud)
所以你也可以直接这样做.
在您的处理程序中,您可以解析/路由URI,但是您希望这样:
func (h *MyHandlerType) ServeHTTP(w http.ResponseWriter, r *http.Request) {
uri := r.URL.Path
// ...use uri...
}
Run Code Online (Sandbox Code Playgroud)