【问题标题】:Intermittent issue: POST requests getting corrupted间歇性问题:POST 请求损坏
【发布时间】: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


【解决方案1】:

看起来您的代理服务器正在分块上传,因为客户端没有发送 Content-Length 标头。 http://httpd.apache.org/docs/2.2/mod/mod_proxy.html#request-bodies

尝试打开 proxy-sendcl,这将强制代理缓冲上传以确定内容长度,并在上传到达您的服务器时停止分块。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-08
    • 2021-10-06
    • 1970-01-01
    • 1970-01-01
    • 2011-03-13
    • 2012-02-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多