背景
我有三个应用程序,我维护自动错误跟踪(通过电子邮件提供错误详细信息)。其中两个是用java和php编写的。
问题:
每隔一段时间我就会收到错误跟踪消息,指出操作页面所需的ID缺失。错误跟踪包括始终为空的请求的内容。请求始终为POST类型,可以通过简单页面或AJAX表单提交后生成。
[编辑]不涉及文件上传。这是一个简单的表单方法=“POST”。
我看不到浏览器类型和空请求之间的任何特殊关联。我无法在开发或测试平台上重现这个错误,因为它有点随机。
我怀疑这个问题也会影响其他平台,例如.NET
任何可能导致表单提交完全为空的想法以及如何最好地解决它除了在缺少必需参数时抛出错误(更多IllegalStateException,因为这些操作页面永远不会被URL访问)。
答案 0 :(得分:2)
在执行POST请求时,PHP会使用已发布数据的大小填充变量$_SERVER['CONTENT_LENGTH']
。它不适用于GET请求。
如果发布的数据太大(大于PHP中post_max_size
指令的值)或结构无效,$_POST
数组为空(因为PHP无法解码发布的数据),但是{{1仍然被填补。
我相信JSP应该有类似的东西。
如果您不发送$_SERVER['CONTENT_LENGTH']
(或等效的JSP)的内容,我建议您开始这样做。如果这样做,那么检查它的$_SERVER
值(或等效的JSP)。
此外,在PHP中,您可以启用CONTENT_LENGTH
指令并在电子邮件中包含always_populate_raw_post_data
。它不适用于具有$HTTP_RAW_POST_DATA
的表单(用于上传文件的表单),但an answer to another SO question描述了解决方法。