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



我正在尝试执行一个HTTP请求,并让golang添加accept-encoding标头,如果响应被压缩,则会自动解压缩。我的印象是,默认的HTTP客户端应该透明地处理它?然而,它似乎没有:

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

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

如果Transport自己请求gzip并得到一个gzip响应,那么该响应将被透明地解压缩。在这种情况下,传输会从响应中删除Content-Encoding标头。检查响应。Uncompressed字段,用于确定响应是否已解压缩。

req, _ := http.NewRequest("Get", "https://stackoverflow.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://stackoverflow.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

相关内容

  • 没有找到相关文章

最新更新