【问题标题】:Large textinput makes http post fail大文本输入使 http post 失败
【发布时间】:2011-11-27 08:37:01
【问题描述】:

我的应用程序中有一个表单,技术人员可以在其中输入有关不同事件或所采取的操作的信息(例如更新服务器)。问题是这些输入可能很长,然后我的表单停止工作。如果浏览器尝试发送数据,服务器会向浏览器返回 302 错误,但是当我尝试提交时,浏览器通常什么也不做。当浏览器什么都不做时,在 Chrome 开发者工具中快速查看显示浏览器尝试向正确的路径执行发布,但状态被列为失败。如果 textarea 包含超过 ~3500 个字符,则总是会发生这种情况。我尝试更改 enctype 以查看会发生什么,但并没有解决问题。

<form enctype="application/x-www-form-urlencoded" action="/some/path/" method="post" _lpchecked="1">
<fieldset>
    <input type="hidden" name="machineId" value="some_integer">
    <input type="hidden" name="eventId" value="some_integer">
    Titel:
    <select name="form[title]">
        <option>Some_option</option>
        <option>some_option</option>
    </select>

    <textarea name="form[text]" rows="25" cols="90"></textarea>
    <input type="submit" value="Spara" title="Spara">
</fieldset>
</form>

关于为什么它不起作用以及可以做什么的任何想法?

编辑: 我的应用程序基于 PHP 并在 Debian/Apache 上运行。我找不到任何可能阻止帖子正常工作的设置。我确实将 post_max_size 设置为 8MB,但 3500 个字符的文本不大于 8MB,所以...

【问题讨论】:

  • 碰巧,您的服务器是否有最大帖子大小?可能达到了最大帖子站点阈值,这会导致它反弹。 (另外,尝试使用multipart/form-data作为enctype的形式,看看有没有变化(application/x-www-form-urlencodedenctype的默认值)
  • 我无法在我的服务器中找到任何可能产生这种影响的设置,但如果您能给我提示并提示要查找的内容,我会再次检查。我正在运行 Debian/Apache。我也尝试了几种不同的编码类型,但它们都给出了相同的结果

标签: html forms


【解决方案1】:

您通过POST 发送的文本很可能不是 1 个字节/字符。 Apache mod_security 可能正在过滤数据。它可能是影响后期加密的任何其他数量的 Apache mod。您可以查看mb_get_info() 和其他 mb_* 函数来验证 PHP 如何对文本进行编码。如果您不想深入挖掘,您可以根据几个数据点对您的 POST 中每个字符使用多少字节进行有根据的猜测,然后调整 post_max_size 以满足您的需求。

如果您无法将错误打印到屏幕上,您可以查看

tail -n 30 /var/log/apache2/error.log #prints last 30 lines of error.log

在出现白屏症状后立即获取有关脚本期间遇到的错误/警告/等的更多详细信息。

另请注意,post_max_sizememory_limit 的限制...我认为这不是问题,但可能需要其他读者考虑。

【讨论】:

  • 在 apache 日志中我发现这是一个“分段错误”。并没有真正解决我的问题,因为它们很难找到,但你给了我答案,非常感谢你。
【解决方案2】:

您使用的是什么服务器端语言?也许你需要一些像这样的文本压缩Huffman Algorithm

【讨论】:

  • 抱歉,完全错过了该信息。我正在运行 PHP 5.2.6
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-03
  • 1970-01-01
  • 1970-01-01
  • 2011-05-27
  • 1970-01-01
  • 2012-12-17
相关资源
最近更新 更多