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