java - 如何调试Tomcat压缩问题?

标签 java tomcat7

我在两台不同的 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 上运行,而在 tomcat 7.0.76 上运行的应用程序不工作,但我在 changelog 中没有找到任何相关内容。这些版本之间。

所以我很困惑为什么一台服务器可以工作,而另一台服务器却不能。

我可以检查什么来尝试找出错误的来源?

最佳答案

问题来 self 使用的 JDK 版本 (1.8.0.161),其中包含报告的错误 here ,至少我认为这是同一个错误......

服务器没有安装相同的版本,因此我通过将服务器 1 的工作 JDK 安装到服务器 2 来解决我的问题。

关于java - 如何调试Tomcat压缩问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49857183/

相关文章:

java - Tomcat 7 ClassNotFoundException :org. glassfish.jersey.servlet.ServletContainer 问题

java - Firefox 浏览器/服务器协商的选定密码与 Tomcat 配置的密码列表不匹配

java - 如何使用 Apache POI 搜索特定日期的 Excel 工作表?

java - 在java中将两个不同的类消除为一个

java - Java 的 main() 方法及其包含类应该做什么?

apache - 如何在 Tomcat 中创建一个友好的 url?

java - Tomcat 7 启动Web App失败并抛出java.lang.RuntimeException : Illegal type for StackMapType: -89

java - 从同一个方法返回两个数组?

java - 我们如何使用Java在TestNg中并行执行cucumber场景?

java - Spring mvc静态资源配置问题