我在两台不同的 CentOS 机器上有两台 tomcat 服务器,运行相同的应用程序(我的开发环境和测试环境)。其中一个在其 server.xml
中启用了压缩,而另一个则没有,因此我向未启用压缩的 tomcat 添加了相同的配置。
两台机器上 server.xml
的相关部分如下所示:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
compression="on"
compressionMinSize="2048"
noCompressionUserAgents="gozilla, traviata"
compressableMimeType="text/html,text/xml,application/json,text/plain"
redirectPort="8443" />
在启用压缩之前,我可以从本地计算机上使用 Postman 调用这两个应用程序,没有任何问题(只有第二个响应未压缩)
现在已启用压缩,当我调用第二个应用程序(我在其中启用了压缩)时,出现错误:
Content-Encoding Error (content_encoding_error) Server response could not be decoded using encoding type returned by server. This is typically caused by a Web Site presenting a content encoding header of one type, and then encoding the data differently.
我做了一些观察:
- 两台服务器都具有完全相同的配置(至少我非常确定),并且第一个应用程序可以完美运行。
- 如果我在 Unix 机器上使用curl 命令调用第二个应用程序,我会毫无问题地得到响应。 (但它不适用于 Windows 盒子中的 postman )
- 第二个应用程序的响应没有 header
Content-Encoding
- 日志没有显示任何工作(所有请求都记录为已处理,状态为 200,但 postman 显示 502 错误)
- 工作应用程序在 tomcat
7.0.64
上运行,而在 tomcat7.0.76
上运行的应用程序不工作,但我在 changelog 中没有找到任何相关内容。这些版本之间。
所以我很困惑为什么一台服务器可以工作,而另一台服务器却不能。
我可以检查什么来尝试找出错误的来源?
最佳答案
问题来 self 使用的 JDK 版本 (1.8.0.161
),其中包含报告的错误 here ,至少我认为这是同一个错误......
服务器没有安装相同的版本,因此我通过将服务器 1 的工作 JDK 安装到服务器 2 来解决我的问题。
关于java - 如何调试Tomcat压缩问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49857183/