原理见 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后, 然后显示出网页。

|535

Note

  1. 这里 gzip 是被浏览器自动解压的。
  2. 见 chrome-dev-tools,是可以直接展示出来的。
  3. 如果仅仅是请求中附带 content-encoding 是没有用的。服务器不会自动解压的。
  4. 类似 HttpClient 这种请求库,影响 gzip 的时候,是不会自动解压的。
  5. return HttpClients.custom().setConnectionManager(clientConnectionManager).disableContentCompression().build();
  6. HttpClient 默认处理解压缩。

问题:HttpClient 处理 gzip 后,响应头里面还有 Content-Encoding:gzip 吗?