I'm trying to create a simple HTTP proxy in Go. I'd like to "pipe" the response from the server directly to the caller client, without actually saving the response in the proxy's heap.
Let's say I do a http.Get("url")
request, the response will contain a "Body" attribute, which is an io.Reader
. I would like to "pipe" this into the http.responseWriter
I get in the handler function
I have looked into a few things - 1. io.Copy 2. io.CopyBuffer 3. io.Pipe
What I don't understand is this: if the proxy will connect the streams, will it actually not need to save the response to its heap? Meaning, if the Get request leads to a download of a 1GB file, does the proxy server's heap needs at least 1GB free?
If so, can any of the functions I mentioned above can help? That's what I thought the pipe to do. If not, which of these is better for my use case?
func handleHttpRequests(httpResponseWriter http.ResponseWriter, httpRequest *http.Request) {
res, err := http.Get("http://localhost:9876")
defer res.Body.Close()
copyHeaders(httpResponseWriter.Header(), res.Header)
io.Copy(httpResponseWriter, res.Body)
}