У меня на главном веб-сервере есть обратные прокси-серверы, которые предназначены для определенного микросервиса и обрабатывают прямые запросы к соответствующим микросервисам.
func newTrimPrefixReverseProxy(target *url.URL, prefix string) *httputil.ReverseProxy {
director := func(req *http.Request) {
// ... trims prefix from request path and prepends the path of the target url
}
return &httputil.ReverseProxy{Director: director}
}
Это отлично работает для чисто JSON-ответов, но недавно я столкнулся с проблемами при попытке передать контент (потоковые ответы) через обратный прокси-сервер. Средства для предоставления контента не имеют значения, (видео) контент подается так, как задумано, когда к сервису обращаются напрямую, а не через обратный прокси.
Обслуживание контента:
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
http.ServeContent(w, r, "video.mp4", time.Now().Add(time.Hour*24*365*12*9*-1), videoReadSeeker)
})
Опять же, videoReadSeeker и то, как подается контент, не является проблемой, проблема заключается в том, что мой ответ ретранслируется, как предназначено, для запрашивающей стороны через обратный прокси; при непосредственном доступе к услуге открывается видео, и я могу отсканировать его до глубины души.
Обратите внимание, что ответ для данных содержимого получен (статус http, заголовки), но поток содержимого в теле ответа - нет.
Как я могу убедиться, что обратный прокси-сервер обрабатывает потоковые ответы в соответствии с содержанием?