2011-05-27 58 views
1

背景:什么能导致http表单提交后的空数据体?

我有三个应用程序,我保持与自动跟踪误差(通过电子邮件与错误的详细信息)。其中两个是用java和php编写的。

问题:

每一次,一段时间我得到一个动作页需要缺少ID的错误跟踪消息。错误跟踪包括始终为空的请求内容。请求始终为POST类型,可以通过简单页面或AJAX表单提交后生成。

[编辑]没有涉及文件上传。这是一个简单的表单方法=“POST”。

我不能看到一个浏览器类型和空请求之间的任何特殊关系。我无法在开发或测试平台上明显地重现此错误,因为它有点随意。

我怀疑,这个问题也影响到其他平台,如.NET

什么可引起提交的表单完全空以及如何最好地解决这一问题除了简单地抛出一个错误,如果需要的参数是任何想法缺少(更多IllegalStateException,因为这些操作页面永远不会被URL访问)。

+0

我很困惑这是与PHP还是JSP相关? – 2011-05-27 13:17:32

+1

你是否在同一时间上传文件。这可能会导致空POST – Layke 2011-05-27 13:18:56

+2

你确定他们是合法用户吗?有人可能试图在您的网站上抓取/自动提交表单?你是否也收到警报中的推荐人?这可能会带来一些亮点 – 2011-05-27 13:20:37

回答

2

当执行POST请求,PHP填充与发布数据的大小可变$_SERVER['CONTENT_LENGTH']。 GET请求不存在。

如果发布的数据太大(PHP中的值大于post_max_size指令)或结构无效,$_POST数组为空(因为PHP无法解码发布的数据),但$_SERVER['CONTENT_LENGTH']仍在填充。

我相信JSP应该有类似的东西。

如果不发的$_SERVER(或JSP当量)的内容,我建议开始做它。如果你这样做,然后检查它的值(或等效的JSP)的CONTENT_LENGTH值。


此外,在PHP,您可能使always_populate_raw_post_data指令,包括$HTTP_RAW_POST_DATA在你的电子邮件。它不适用于具有enctype='multipart/form-data'(用于上传文件的表单)的表单,但an answer to another SO question描述了解决此问题的方法。

+0

这些帖子的数据内容并不大(例如注册和个人资料表格)。该表格不是多部分。抛开错误跟踪,可能会导致此行为的原因是什么?根据用户的反馈,我知道他们在没有特殊原因收到错误页面时点击了提交按钮。即使你提交了一个空白的,你也会得到一个空的字符串,而不是一个完全空白的邮件正文。 – Pierre 2011-05-27 14:12:17

+0

如果可能,请尝试启用'always_populate_raw_post_data'并在错误跟踪电子邮件中包含'$ HTTP_RAW_POST_DATA'。或者,您可以使用'file_get_contents('php:// input')'而不是'$ HTTP_RAW_POST_DATA',它应该在不启用'always_populate_raw_post_data'的情况下工作。还应该检查'$ _SERVER ['CONTENT_LENGTH']'的值。 – binaryLV 2011-05-27 14:17:03