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
我正在尝试在 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