php - 间歇性问题: POST requests getting corrupted

标签 php actionscript-3 post upload apache2

在过去的几个月里,我遇到了一个奇怪的间歇性问题,我一直在疯狂地尝试隔离。

我有一个 Flash 电影在我的网站上运行,它生成 XML 数据,然后通过 POST 请求将其发送到 PHP 脚本。此文件的完整性是我的应用程序正常运行的关键,因此我需要确保它完好无损地到达。为此,我生成了一个 MD5 哈希并将其也一起发送。在接收方,我的 PHP 脚本将接受数据,对其进行 MD5 处理并比较两个哈希值。如果它们相同,那么我认为该文件没有问题并将其存储起来以备后用。如果 MD5 哈希值不同,我会向自己发送一封电子邮件并制作一份文件副本以供人工检查。

大多数情况下 (>99%) 这都能很好地工作,而且我发现上传的数据没有问题。然而,每隔一段时间我就会发现一些额外的字符被注入(inject)到 XML 文件中,导致它被破坏。发生这种情况时,文件似乎也被截断了。这是我在损坏的文件中看到的片段 - 它看起来好像是一些与网络服务器相关的设置:

...开始 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 设置,但它们似乎没有任何区别(如果您认为相关/有用,我可以稍后发布)

如果有人知道发生了什么或如何开始解决这个问题,我将非常非常感激。几个月来我一直在努力研究这个问题,但一无所获。

非常感谢您的宝贵时间!

最佳答案

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

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

关于php - 间歇性问题: POST requests getting corrupted,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5297749/

相关文章:

php - 马根托。如何使用自定义选项以编程方式在购物车中添加简单产品

php - 如何使用php每3小时将json信息保存到数组中?

actionscript-3 - 安全错误 : Error #2152: Full screen mode is not allowed.

json - 如何在 delphi 中使用 THTTPClient 发布 json?

json - 创建或更新索引时 `type`不更新

php - Wordpress 是否有 $_POST、$_GET 和 $_REQUEST 的包装类?

php - 有没有办法把这个PHP放到一个数组中,简化一下呢?

php - 在 PHP 中使用 vs include 作为导入语句

actionscript-3 - 什么时候将函数传递给函数才有意义?

flash - Flex VideoDisplay 只是平面泄漏