调试一个非常难以重现的Java Web应用程序问题(前端)

时间:2014-06-30 17:24:40

标签: java css nginx tomcat7 internet-explorer-11

我有一个Java Web应用程序,它作为WAR部署到Tomcat 7.0.41(myapp.war)。我注意到当我将WAR部署到位于我们网络的一部分的Tomcat时,网页显示完全正常。但是,这只发生在IE 11中,如果我采用完全相同的WAR并将其部署到位于我们网络另一部分的Tomcat服务器的完全相同的版本/ Chef-configured-instance,则页面样式看起来有所不同而且完全错了。同样,这是特定于IE11以及网络中提供应用程序的位置。如果我在IE 11中使用" good"在网络上的位置,前端渲染完美。或者,如果我从一个"坏"在网络上的位置,但在非IE浏览器中,一切都很好。

我有一种感觉,我们可能有一些IT代理(nginx等)阻止Tomcat提供某些CSS / JS文件,因此最终结果是一个部分完整的前端,在浏览器中看起来很不可思议。不知何故,这只会在IE 11中出现。

我(有点)通过查看我的所有HTML,JS和CSS文件的来源并将它们复制到本地文件夹中的文件来确认这一点。然后我在浏览器中打开一个HTML文件(本地),网站显示完美。

这里的问题是我的JS文件使用了一堆开源JS库。这些库依赖于其他库。所以依此类推,依赖图非常庞大。我很难确定哪些文件没有正确/完全下载。

这里是踢球者:如果我将html5shiv添加到我的应用中,那么问题就会完全消失,无论是哪种浏览器(IE或不是)或我选择的网络中的哪个位置。但是,添加html5shiv会破坏我的应用中的其他内容,并且出于此问题上下文之外的原因,无法使用。

任何人都知道如何解决/解决这个问题?为什么这只会影响IE 11而不影响其他浏览器?为什么html5shiv解决这个问题?!?

1 个答案:

答案 0 :(得分:1)

您需要开始使用Wireshark

它的作用是捕获所有网络流量,并允许您完全按照网卡发送/接收的方式查看。

当您访问出现问题的网页时,我要做的是捕获您的计算机与服务器所在位置之间发生的完整流量。然后对不起作用的服务器重复此操作。

然后您将拥有完整的流量并可以并排比较它们。即使它没有告诉您问题的原因,Wireshark也会告诉您两个不同服务器发送的数据包之间的差异。

你也可以通过运行TCPDump(使用类似tcpdump -i eth0 -w file.cap -s 0之类的命令来获取服务器上的完整数据包,而不仅仅是前X个字节)来捕获发送的数据包,然后反之亦然。在Wireshark中查看捕获。

  

" Wireshark是否提供了这样的文件级抽象,还是我需要阅读的所有细节,字节级输出?"

两者都有。基本上,一旦在您面前有流,您就可以通过查找数据包中的GET条目来查看各个请求。

enter image description here

一旦您确定文件的开始位置,您可以右键单击该数据包,选择关注TCP流,它将为您提供该TCP流的摘要视图:

enter image description here

如果您需要文件之间的详细差异,它将会存在......但是它可能会像文件被完全截断或损坏一样显而易见,而不仅仅是一两个字节其中一个文件出错了。