Go http 客户端不会自动分块 body

Go http client doesn't automatically dechunk body

我正在从 Go 流式传输 http,服务器按预期响应 "Transfer-Encoding: chunked"。我被告知 Go 中的 http 客户端会自动从 http 响应中分离 body,移除 \r\n。但在我的情况下,它不会自动删除,所以我必须使用 ChunkedReader 来读取主体。

知道为什么 golang 不自动分解我的 body 吗?

编辑: 这是 http 请求:

var transport = http.Transport{
  Proxy:                  nil,
  ExpectContinueTimeout:  0,
  MaxResponseHeaderBytes: 16384}

var httpClient = http.Client{
  Transport: &transport,
  CheckRedirect: func(req *http.Request, via []*http.Request) error {
    return http.ErrUseLastResponse
}}

bodyReader, bodyWriter := io.Pipe()
req, _ := http.NewRequest("GET", "http://x.x.x.x/stream", bodyReader)
response, err := httpClient.Do(req)

buffer := make([]byte, 2 << 15)
n, readErr = response.Body.Read(buffer)   <-- should be dechunked body

读入缓冲区的数据未分块。知道为什么吗?

我弄明白了为什么 body 没有自动分块。这是因为 HTTP 响应是 HTTP/1.0。在这种情况下,golang 会忽略传输编码 header.

https://github.com/golang/go/issues/12785