【发布时间】:2011-07-14 22:35:28
【问题描述】:
在过去的几个月里,我遇到了一个奇怪的间歇性问题,我一直在疯狂地试图隔离。
我的网站上运行了一个 Flash 电影,它生成 XML 数据,然后通过 POST 请求将其发送到 PHP 脚本。该文件的完整性是我的应用程序正常运行的关键,因此我需要确保它完好无损。为此,我生成了一个 MD5 哈希并将其发送。在接收端,我的 PHP 脚本将接受数据,对其进行 MD5 处理并比较两个哈希值。如果它们相同,那么我认为该文件很好并将其存储以备后用。如果 MD5 哈希值不同,我会向自己发送一封电子邮件并制作一份文件副本以供人工检查。
大多数情况下 (>99%) 效果很好,我发现上传的数据没有问题。但是,每隔一段时间我就会发现一些额外的字符被注入到 XML 文件中,这会导致它损坏。发生这种情况时,文件也似乎被截断。这是我在损坏文件中看到的内容的 sn-p - 它看起来好像是一些与 Web 服务器相关的设置:
...开始 XML 数据 ...
<scale>1.7</scale>
<rotation>0</rotation>
<popdelay>0.7290036325342953</popdelay>
Proxy-Connection: keep-alive
Cache-Control: max-age=0
0<poptime>0.6</poptime>
<popangle>90</popangle>
<shadowvis>true</shadowvis>
<backingcolor>0xFF222222</backingcolor>
...继续 XML 数据...
我发现该问题在特定机器上发生后仍将继续发生 - 即,如果用户不断尝试上传他们的文件,错误将继续在 100% 的时间出现。我已经在多个浏览器/平台上看到了这种情况(如下所列):
Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10.5; en-US; rv:1.9.2.10) Gecko/20100914 Firefox/3.6.10
Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3
Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; CMNTDF; InfoPath.3; .NET4.0C)
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; InfoPath.1)
Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1.16) Gecko/20101130 Firefox/3.5.16 (.NET CLR 3.5.30729)
Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; CMNTDF; InfoPath.3; .NET4.0C)
Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.3) Gecko/20100423 Ubuntu/10.04 (lucid) Firefox/3.6.3
我的应用程序服务器正在通过另一个运行 mod_proxy 的 apache2 服务器访问,但我不确定这是否起作用,因为此过程似乎几乎所有时间都在其他机器上工作。我尝试调整我的 apache2 设置,但它们似乎没有任何区别(如果您认为它相关/有用,我可以稍后发布)
如果有人知道发生了什么或如何开始解决这个问题,我将非常非常感激。这几个月我一直在尝试研究,但没有提出任何建议。
非常感谢您的宝贵时间!
【问题讨论】:
-
由于它发生在多种不同的浏览器类型上,它很可能不是浏览器的事情。开始调查这些请求的来源。它是特定的 ISP 吗?一个特定的子网?
-
你用什么方法发送数据?您发送的数据有多大?
-
对“数据有多大”问题表示赞同。看起来 XML 在多个请求中被破坏了,要么是由于大小,要么是请求花费了很长时间(可能是由于外部连接速度慢)。
-
我在我们的大型网站上看到了完全相同的问题(代理内容...缓存控制,有时甚至只是
Pr注入 POST 数据并破坏它)。甚至不做上传。对我们来说奇怪的是它只有 Mac OS X Firefox(Firefox 的几个版本)。我们有一个 Zeus 负载均衡器——你也有吗?
标签: php actionscript-3 post upload apache2