2 回答
TA贡献1780条经验 获得超3个赞
您看到的错误发生在请求解析逻辑中,该逻辑发生在ServeHTTP
调用之前。
HTTP 请求是由包中的ReadRequest
函数从套接字读取的net/http
。它将使用空 URL 部分标记请求的第一行,然后继续解析 URL:
if req.URL, err = url.ParseRequestURI(rawurl); err != nil { return nil, err }
不幸的是,此函数将返回一个空 URL 字符串的错误,这将反过来中止请求读取过程。
因此,在不修改标准库代码的情况下,似乎没有一种简单的方法可以实现您的目标。
TA贡献1859条经验 获得超6个赞
我不确定 Go 的 HTTP 解析器是否允许没有 URI 路径元素的请求。如果没有,那么你就不走运了。但是,如果确实如此;你可以像这样覆盖请求的路径:
type FixPath struct {}
func (f *FixPath) ServeHTTP(w http.ResponseWriter, r *http.Request) {
r.RequestURI = "/dummy/path" // fix URI path
http.DefaultServeMux.ServeHTTP(w, r) // forward the fixed request to http.DefaultServeMux
}
func main() {
// register handlers with http.DefaultServeMux through http.Handle or http.HandleFunc, and then...
http.ListenAndServe(":8080", &FixPath{})
}
- 2 回答
- 0 关注
- 274 浏览
添加回答
举报