转到http客户端不会自动将主体脱壳

时间:2019-09-12 08:56:07

标签: http go chunked-encoding transfer-encoding

我正在从Go中流式传输http,服务器按预期响应“传输编码:分块”。有人告诉我,Go中的http客户端应自动从http响应中拆下正文,删除\ r \ n。但就我而言,它不会自动删除,因此我必须使用ChunkedReader读取正文。

有人知道为什么golang不能自动对我的身体脱壳吗?

编辑: 这是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

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

1 个答案:

答案 0 :(得分:0)

我弄清楚了为什么身体不会自动脱矮。这是因为HTTP响应是HTTP / 1.0。在这种情况下,golang会忽略传输编码标头。

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