Golang:默认 HTTP 客户端不处理压缩

Golang: default HTTP client doesn't handle compression

我正在尝试执行 HTTP 请求并让 golang 添加 accept-encoding header 并在响应被压缩时自动解压缩响应。我的印象是默认的 HTTP 客户端应该透明地处理它?但是它似乎没有:

    req, _ := http.NewRequest("Get", "https://whosebug.com", nil)
    // req.Header.Add("Accept-Encoding", "gzip")
    client := &http.Client{}
    resp, _ := client.Do(req)
    println(resp.Header.Get("Content-Encoding"))

如果我手动添加 Accept-Encoding,它会发送 header,但我必须手动解压缩响应。

如果 Transport 自己请求 gzip 并获得 gzip 响应,则响应被透明地解压缩。在这种情况下,传输从响应中删除 Content-Encoding header。 检查 Response. Uncompressed 字段以确定响应是否未压缩。

req, _ := http.NewRequest("Get", "https://whosebug.com", nil)
resp, _ := http.DefaultClient.Do(req)
fmt.Println(resp.Uncompressed) // prints true
fmt.Println(resp.Header.Get("Content-Encoding"))  // prints blank line

如果应用程序明确请求 gzip,则响应按原样返回。

req, _ := http.NewRequest("Get", "https://whosebug.com", nil)
req.Header.Add("Accept-Encoding", "gzip")  
client := &http.Client{}
resp, _ := client.Do(req)
fmt.Println(resp.Uncompressed)  // prints false
fmt.Println(resp.Header.Get("Content-Encoding")) prints gzip