如何调试 Tomcat 压缩问题?
How to debug Tomcat compression issue?
我在两台不同的 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 盒子的邮递员)
- 第二个应用程序的响应没有 header
Content-Encoding
- 日志没有显示任何工作(所有请求都记录为已处理,状态为 200,但邮递员显示 502 错误)
- 正在运行的应用程序在 tomcat
7.0.64
上运行,而没有在 tomcat 7.0.76
上运行,但我没有在 changelog 中找到任何相关内容] 在这些版本之间。
所以我很困惑为什么一个服务器可以工作而另一个服务器不能工作。
我可以检查什么来尝试找出错误的来源?
问题来自我使用的 JDK 版本 (1.8.0.161
),其中包含报告的错误 here,至少我认为这是同一个错误...
服务器没有安装相同的版本,所以我通过将服务器 1 的工作 JDK 安装到服务器 2 来解决我的问题。
我在两台不同的 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 盒子的邮递员)
- 第二个应用程序的响应没有 header
Content-Encoding
- 日志没有显示任何工作(所有请求都记录为已处理,状态为 200,但邮递员显示 502 错误)
- 正在运行的应用程序在 tomcat
7.0.64
上运行,而没有在 tomcat7.0.76
上运行,但我没有在 changelog 中找到任何相关内容] 在这些版本之间。
所以我很困惑为什么一个服务器可以工作而另一个服务器不能工作。
我可以检查什么来尝试找出错误的来源?
问题来自我使用的 JDK 版本 (1.8.0.161
),其中包含报告的错误 here,至少我认为这是同一个错误...
服务器没有安装相同的版本,所以我通过将服务器 1 的工作 JDK 安装到服务器 2 来解决我的问题。