为什么go http客户端在处理POST时放置transfer-encoding = chunked header

时间:2017-08-28 10:44:32

标签: http go

我像这样发出POST请求:

// ...pack non-zero buf
req, _ := http.NewRequest("POST", url, bufio.NewReader(buf))
req.Header.Add("X-Uid", "12345")
req.Header.Add("Content-Length", strconv.Itoa(buf.Len()))

client := http.Client{}
resp, err := client.Do(req)

我希望没有" Transfer-Encoding"标题将被传递,但我在服务器日志中看到" Transfer-Encoding:chunked"标题已通过。

1 个答案:

答案 0 :(得分:0)

您正在将bufio.Reader传递给http请求。由于您无法确定bufio.Reader的长度,因此http包会覆盖Content-Length以确保请求有效。

如果你有内容缓冲,并且你知道长度,那么没有理由将它包装在bufio.Reader中,只需直接传递缓冲区。如果您还没有缓冲内容,请允许它使用分块编码,这不应该在请求中产生任何功能差异。