6

我们有一个在 Tomcat 6 上运行的 Tapestry-Spring-Hibernate webapp,每秒处理大约 1000 个请求。随机地,没有明显的原因,页面只是在浏览器上显示一堆随机字符。但是,当页面刷新时,它显示正常。下面是 Chrome 上乱码页面的来源截图:

Chrome上tomcat的页面

这是我到目前为止发现的:

  1. 它似乎不是特定于浏览器的。我在 Chrome 和 Firefox 上见证了这一点,但用户也在 IE 7 及更高版本上报告了这一点。
  2. 服务器上的负载似乎与发生这种情况的时间无关。
  3. 刷新页面正常显示页面,就好像什么都没发生过一样。
  4. 我在服务器或应用程序日志中看不到任何相关内容
  5. 页面的内容类型标签是<meta content="text/html; charset=utf-8" http-equiv="content-type"/>
  6. 在同一个容器上部署了其他几个 web 应用程序,一个是 Alfresco,但它们似乎根本没有展示这一点。

我的问题是,以前有没有人遇到过这种情况,如果有,他们能指出我应该从哪里开始寻找吗?这是页面具有不正确的内容类型或服务器由于某种原因无法处理它的问题吗?或者这可能是 Tapestry 或应用程序本身的框架错误?欢迎任何指点。在这一点上,我不确定问题出在哪里,所以我不确定这是发生在 ServerFault 上还是留在这里。

4

3 回答 3

2

这很可能是应用程序中的错误。(大多数错误是......尽管程序员自然倾向于责怪其他事情。)

但是,追踪这个问题可能有点棘手。我建议你从标准的东西开始:

  • 查看服务器错误日志以查看在这些“事件”之一发生时是否出现任何奇怪的情况。
  • 查看服务器访问日志,看看您是否可以识别产生垃圾数据的请求。
  • 启用浏览器的调试器,看看是否可以通过这种方式追踪错误请求。

如果您能弄清楚产生不良响应的请求是什么,您将更有动力找到原因。


FWIW - 这看起来不像是字符编码问题的结果。这看起来更像是二进制或压缩数据。

于 2012-05-23T13:46:00.810 回答
1

这是导致我看到乱码页面的一种情况。在错误页面上,Tapestry 设置了一个名为 X-Tapestry-ErrorMessage 的响应标头。显然标头中不允许换行符(至少在某些浏览器上),因此如果该标头中有换行符,则会出现乱码。我们设置的一条错误消息恰好有一个尾随的新行。在设置该标题之前,我将其更改为删除任何换行符,然后错误页面正确显示。

于 2012-05-24T05:25:00.237 回答
0

这似乎与 Tapestry 框架中的 gzip 压缩问题有关(如 @barnyr 所建议),并且可能是 Tapestry 5.3 中的回归错误。从邮件列表线程中引用霍华德:

我相信这是一个错误,在某些情况下,损坏的 GZIP 页面内容流将流式传输到客户端;这肯定在 5.2.6 中修复,但我认为它在 5.2.5 中也已修复。

contributeApplicationDefaults快速修复是在应用模块类的方法中添加以下配置符号:

configuration.add(SymbolConstants.GZIP_COMPRESSION_ENABLED, "false");

这当然会禁用 gzip 压缩,但可能值得进行权衡。

可能相关的问题:

于 2012-06-16T21:39:16.177 回答