Выяснили виновника - было промежуточное ПО, которое по какой-то причине предварительно обрабатывало запрос и пересылало запросы через прокси.
func (h *Handler) proxy(w http.ResponseWriter, r *http.Request, uri *url.URL) {
params := r.URL.Query()
proxy := httputil.ReverseProxy{Director: func(proxyRequest *http.Request) {
proxyRequest.URL.Scheme = uri.Scheme
proxyRequest.URL.Host = uri.Host
proxyRequest.URL.Path = uri.Path
proxyRequest.Body = r.Body
proxyRequest.URL.RawQuery = paramsToString(params)
}}
proxy.ServeHTTP(w, r)
}
func paramsToString(m url.Values) string {
keys := make([]string, 0, len(m))
for k := range m {
keys = append(keys, k+"="+m[k][0])
}
return "?" + strings.Join(keys, "&")
}
proxyRequest.URL.RawQuery
ожидает необработанный запрос, а не запрос с ?
;paramsToString
func должен быть на самом деле
func paramsToString(m url.Values) string {
keys := make([]string, 0, len(m))
for k := range m {
keys = append(keys, k+"="+m[k][0])
}
return strings.Join(keys, "&")
}