Spring 启动 http 响应压缩对某些 User-Agents 不起作用

Spring boot http response compression doesn't work for some User-Agents

我正在尝试在 Spring 启动 Web 应用程序上启用 http 响应压缩。 它适用于某些 user-agents,但出于某种原因不适用于其他人(具体情况见下文)。

我的基本问题是: 为什么 Spring 引导中的 http 响应压缩 (gzip) 仅适用于某些 User-Agent headers 以及它的配置位置。

Spring boot reference什么也没说。

我准备了启用压缩的简单 Web 应用程序:sample spring-boot-compression app 有集成测试验证 gzip 编码仅适用于某些情况。

我配置 spring 引导:

server:
  tomcat:
    compression: on
    compressable-mime-types: text/html,text/css,application/javascript,application/json,application/font-sfnt,application/font-woff,application/font-woff2

当我尝试使用 curl 执行一些请求时:

$ curl -i -H "Accept-Encoding: gzip,deflate" http://localhost:8080
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: chunked
Content-Encoding: gzip
Vary: Accept-Encoding

我看到 Content-Encoding: gzip header 已设置。

当我将 User-Agent 设置为 AppleWebKit(或其他一些浏览器,如 IE)时,它不会压缩:

$ curl -i -H "Accept-Encoding: gzip,deflate" -H "User-Agent: AppleWebKit" http://localhost:8080
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: chunked
Vary: Accept-Encoding

我用其他一些浏览器和 User-Agent header 修改重复了我的测试并收到了一些奇怪的结果。

这里有一些工作(响应被压缩)User-Agent headers:

- Mozilla/5.0
- Mozilla/5.0 (Windows NT 6.1; WOW64) Chrome/46.0.2490.80 Safari/537.36
- Mozilla/5.0 (Windows NT 6.1; WOW64; rv:34.0) Firefox/34.0
- SomeUnknownBrowser

一些工作User-Agent headers:

 - AppleWebKit
 - Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36
 - Mozilla/5.0 (Windows NT 6.1; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0
 - Gecko/20100101

我也尝试使用 GzipFilter 进行压缩,结果完全一样。还尝试了嵌入式 Jetty 而不是 Tomcat - 结果相同。

也许我只是漏掉了什么。

您可能正在使用某种防病毒软件(可能是 ESET)。尝试关闭 HTTP 保护。

使用 Eset,您可以尝试类似的操作:高级 -> Internet 和电子邮件 -> Web 访问保护 - 关闭。

这对我有用 Spring 1.4

 server.compression.enabled: true
server.compression.mime-types: application/json,application/xml,text/html,text/xml,text/plain,text/css,application/javascript