2 回答

TA貢獻(xiàn)1780條經(jīng)驗 獲得超4個贊
您看到的錯誤發(fā)生在請求解析邏輯中,該邏輯發(fā)生在ServeHTTP
調(diào)用之前。
HTTP 請求是由包中的ReadRequest
函數(shù)從套接字讀取的net/http
。它將使用空 URL 部分標(biāo)記請求的第一行,然后繼續(xù)解析 URL:
if req.URL, err = url.ParseRequestURI(rawurl); err != nil { return nil, err }
不幸的是,此函數(shù)將返回一個空 URL 字符串的錯誤,這將反過來中止請求讀取過程。
因此,在不修改標(biāo)準(zhǔn)庫代碼的情況下,似乎沒有一種簡單的方法可以實現(xiàn)您的目標(biāo)。

TA貢獻(xiàn)1859條經(jīng)驗 獲得超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 關(guān)注
- 305 瀏覽
添加回答
舉報