猿问

Go net/http Transport Accept-Encoding:gzip 不提示编码响应

我知道 net/http 传输将添加Accept-Encoding: gzip到请求中,除非DisableCompression设置为 True,如果我希望它自动解压缩 gzip 响应,则需要这样做。在这种情况下,以下代码不会收到Content-Encoding: gzip标头: https:

//play.golang.org/p/FWs5uG9pZEL(注意:由于网络限制,不会在操场上运行)


如果我运行本地服务器并使用它运行上面的代码,我可以看到正在发送的预期标头:


GET / HTTP/1.1

Host: localhost:5555

User-Agent: Go-http-client/1.1

Accept-Encoding: gzip

go 创建的连接是否还有其他原因导致服务器不返回压缩响应?


至尊宝的传说
浏览 292回答 1
1回答

qq_遁去的一_1

Accept-Encoding: gzip仅表示客户端能够并且愿意处理 gzip 压缩内容。这并不意味着服务器必须实际压缩内容。事实上,例如对于图像,使用 gzip 压缩内容没有任何意义,因为这些已经是压缩数据(但不是使用 gzip),并且在顶部添加 gzip 可能实际上会增加有效负载的大小。如果您希望您的服务器返回压缩内容,您实际上必须配置您的服务器来执行此操作。有关如何使用 nginx 执行此操作的示例,请参见此处。请注意,http.Response它将透明地解压缩响应并相应地更新标头,即删除Content-Encoding。这意味着您在使用resp.Header.Get("Content-Encoding"). 如果响应被自动解压,可以在Uncompressed字段中看到:fmt.Println("was compressed ", resp.Uncompressed)有关更多信息,请参阅go doc http.Response:// Uncompressed reports whether the response was sent compressed but// was decompressed by the http package. When true, reading from// Body yields the uncompressed content instead of the compressed// content actually set from the server, ContentLength is set to -1,// and the "Content-Length" and "Content-Encoding" fields are deleted// from the responseHeader. To get the original response from// the server, set Transport.DisableCompression to true.Uncompressed bool
随时随地看视频慕课网APP

相关分类

Go
我要回答