duanou3868 2019-09-05 07:38
浏览 50

Go中的Http代理,完全不保存服务器的响应

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)
}
  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 如何在scanpy上做差异基因和通路富集?
    • ¥20 关于#硬件工程#的问题,请各位专家解答!
    • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
    • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
    • ¥30 截图中的mathematics程序转换成matlab
    • ¥15 动力学代码报错,维度不匹配
    • ¥15 Power query添加列问题
    • ¥50 Kubernetes&Fission&Eleasticsearch
    • ¥15 報錯:Person is not mapped,如何解決?
    • ¥15 c++头文件不能识别CDialog