Golang http.Response gzip writer ERR_CONTENT_LENGTH_MISMATCH

时间:2017-06-18 10:13:14

标签: go gzip reverse-proxy

我正在尝试从httputil.ReverseProxy gzip代理响应 - > ModifyResponse。 所以我只能访问http.Response对象。

res.Body = ioutil.NopCloser(bytes.NewReader(minified))
res.ContentLength = int64(len(minified))
res.Header.Set("Content-Length", strconv.Itoa(len(minified)))
res.Header.Del("Content-Encoding")

这很好用。但是当我gzip内容时,我会得到一个内容长度不匹配的错误。

var buf bytes.Buffer
gz := gzip.NewWriter(&buf)
gz.Write(minified)

readCloser := ioutil.NopCloser(&buf)
res.Body = readCloser

res.ContentLength = int64(buf.Len())
res.Header.Set("Content-Length", strconv.Itoa(buf.Len()))
res.Header.Set("Content-Encoding", "gzip")

谁能说出我做错了什么?即使输入发生变化,内容长度也始终为10。

1 个答案:

答案 0 :(得分:2)

您未关闭gz作家。这是可能的问题。 gzip.Writer documentation说:

  

完成后,在WriteCloser上调用Close是调用者的责任。写入可以缓冲,直到关闭才刷新。

因此,在您完成数据写入后,请尝试添加gz.Close()