原理见 gzip 压缩算法原理
排查案例见 Nginx 和 Tomcat 的 gzip 压缩配置
http 压缩过程
浏览器发送 Http request 给 Web 服务器, request 中有 Accept-Encoding: gzip, deflate
。 (告诉服务器, 浏览器支持 gzip 压缩)
Web 服务器接到 request 后, 生成原始的 Response, 其中有原始的 Content-Type 和 Content-Length。
Web 服务器通过 Gzip,来对 Response 进行编码, 编码后 header 中有 Content-Type 和 Content-Length(压缩后的大小), 并且增加了 Content-Encoding:gzip
. 然后把 Response 发送给浏览器。
浏览器接到Response后,根据Content-Encoding:gzip
来对Response 进行解码。 获取到原始response后, 然后显示出网页。
Note
- 这里 gzip 是被浏览器自动解压的。
- 见 chrome-dev-tools,是可以直接展示出来的。
- 如果仅仅是请求中附带
content-encoding
是没有用的。服务器不会自动解压的。- 类似
HttpClient
这种请求库,影响 gzip 的时候,是不会自动解压的。return HttpClients.custom().setConnectionManager(clientConnectionManager).disableContentCompression().build();
- HttpClient 默认处理解压缩。
问题:HttpClient 处理 gzip 后,响应头里面还有 Content-Encoding:gzip
吗?