首页 > 解决方案 > Go http 客户端不会自动拆分正文

问题描述

我正在从 Go 流式传输 http,服务器按预期响应“Transfer-Encoding:chunked”。我被告知 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

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

标签: httpgochunked-encodingtransfer-encoding

解决方案


我想通了为什么身体没有自动去块。这是因为 HTTP 响应是 HTTP/1.0。在这种情况下,golang 会忽略传输编码标头。

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


推荐阅读